在MySQL中获取顶部不同的记录

3

这可能是一些很简单的东西,所以请原谅我的糊涂时刻 :)

我有一个名为“album”的表格

* albumId
* albumOwnerId (who created)
* albumCSD (create stamp date)

现在我想做的是选择最近更新的前10个专辑。但是,我不想返回来自同一人的10个专辑 - 我只想要每个唯一人的一个专辑。也就是说,来自10个不同人的10个专辑。

下面是我的代码,但它不能正常工作,我无法弄清原因。有什么想法吗?

谢谢

SELECT DISTINCT(albumOwnerId), albumId
FROM album
ORDER BY albumCSD DESC
LIMIT 0,10

这里是一些示例数据,接下来是我想要获取的内容。希望这样更清楚明了。

数据:

albumOwnerID, albumId, albumCSD
18, 194, '2010-10-23 11:02:30'
23, 193, '2010-10-22 11:39:59'
22, 192, '2010-10-12 21:48:16'
21, 181, '2010-10-12 20:34:11'
21, 178, '2010-10-12 20:20:16'
19, 168, '2010-10-12 18:31:55'
18, 167, '2010-10-11 21:06:55'
20, 166, '2010-10-11 21:01:47'
18, 165, '2010-10-11 21:00:32'
20, 164, '2010-10-11 20:50:06'
17, 145, '2010-10-10 18:54:24'
17, 144, '2010-10-10 18:49:28'
17, 143, '2010-10-10 18:48:08'
17, 142, '2010-10-10 18:46:54'
16, 130, '2010-10-10 16:17:57'
16, 129, '2010-10-10 16:17:26'
16, 128, '2010-10-10 16:07:21'
15, 119, '2010-10-10 15:24:28'
15, 118, '2010-10-10 15:24:11'
14, 100, '2010-10-09 18:22:49'
14, 99, '2010-10-09 18:18:46'
11, 98, '2010-10-09 15:50:13'
11, 97, '2010-10-09 15:44:09'
11, 96, '2010-10-09 15:42:28'
11, 95, '2010-10-09 15:37:25'

期望数据:

18, 194, '2010-10-23 11:02:30'
23, 193, '2010-10-22 11:39:59'
22, 192, '2010-10-12 21:48:16'
21, 181, '2010-10-12 20:34:11'
19, 168, '2010-10-12 18:31:55'
17, 145, '2010-10-10 18:54:24'
16, 130, '2010-10-10 16:17:57'
15, 119, '2010-10-10 15:24:28'
14, 100, '2010-10-09 18:22:49'
11, 98, '2010-10-09 15:50:13'

这段程序相关的内容翻译成中文如下:我写的代码好长啊,不过... 你试过按照albumownerid分组吗?! - Tima
你忘了专辑所有者ID为20了,是吧?! - Tima
@Mur。正确 - 发现得很好。我手动编辑了所需的结果,可能不小心跳过了20! - Paolo Broccardo
2个回答

2
我能够利用这个查询语句得到您需要的结果。
SELECT albumOwnerID, albumId, albumCSD
FROM album
WHERE albumCSD in
(SELECT  Max(album.albumCSD) AS MaxvonalbumCSD
FROM album
GROUP BY album.albumOwnerID);

然而在MS Access中


嗨Mur - 謝謝 - 在MySql中可以正常運作並提供所需的結果!只需要以DESC順序排列,但這很簡單。非常感謝! - Paolo Broccardo

1
select albumOwnerID, albumID
from album
Group by albumOwnerID, albumID
Order by albumcsd desc
LIMIT 0,10

编辑:

select albumOwnerID, albumID 
from album
where albumOwnerID in (select distinct albumOwnerID from album order by albumCSD )
LIMIT 0,10

嗨,Sachin。那个不起作用。使用或不使用group by子句都会产生完全相同的结果。AlbumOwnerId不是唯一的。 - Paolo Broccardo
@Cheeky - 相同的 ownerID 是否可以拥有不同的 albumID?如果是,请使用 Group by albumOwnerID,并将 albumID 从 group by 中去除。 - Sachin Shanbhag
这是我最初尝试的方法,但是不正确,因为albumOwnerIds返回的顺序不对。 - Paolo Broccardo
1
如果您尝试从(按albumCSD降序排列的)album中选择albumOwnerID、albumID,则应使用以下语句:SELECT albumOwnerId、albumId FROM album GROUP BY albumOwnerID ORDER BY albumCSD DESC LIMIT 0,10。 - Tima
嗨Mur - 那个查询甚至无法执行。错误 - “每个派生表都必须有自己的别名”。 - Paolo Broccardo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接