相关疑难解决方法(0)

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数

获取具有列的最大值的行

表:

UserId, Value, Date.
Run Code Online (Sandbox Code Playgroud)

我想得到UserId,每个UserId的max(Date)值.也就是说,具有最新日期的每个UserId的值.有没有办法在SQL中执行此操作?(最好是Oracle)

更新:对任何含糊不清的道歉:我需要获取所有UserIds.但对于每个UserId,只有该用户具有最新日期的那一行.

sql oracle greatest-n-per-group

556
推荐指数
10
解决办法
56万
查看次数

MySQL"Group By"和"Order By"

我希望能够从电子邮件表中选择一堆行,并通过发件人对它们进行分组.我的查询如下所示:

SELECT 
    `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails` 
GROUP BY LOWER(`fromEmail`) 
ORDER BY `timestamp` DESC
Run Code Online (Sandbox Code Playgroud)

查询几乎按我的意愿运行 - 它选择通过电子邮件分组的记录.问题是主题和时间戳不对应于特定电子邮件地址的最新记录.

例如,它可能会返回:

fromEmail: john@example.com, subject: hello
fromEmail: mark@example.com, subject: welcome
Run Code Online (Sandbox Code Playgroud)

当数据库中的记录是:

fromEmail: john@example.com, subject: hello
fromEmail: john@example.com, subject: programming question
fromEmail: mark@example.com, subject: welcome
Run Code Online (Sandbox Code Playgroud)

如果"编程问题"主题是最新的,那么在分组电子邮件时如何让MySQL选择该记录呢?

mysql sql group-by sql-order-by aggregate-functions

92
推荐指数
5
解决办法
19万
查看次数

MySQL在Group by之前订购

我需要找到每个作者的最新帖子,然后对结果进行分组,这样我每个作者只会发一个最新的帖子.

SELECT wp_posts.* FROM wp_posts
        WHERE wp_posts.post_status='publish'
        AND wp_posts.post_type='post'
        GROUP BY wp_posts.post_author           
        ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

这是正确地对输出进行分组,因此我每个作者只获得一个帖子,但是在分组后将结果排序,而不是在选择之前.

mysql wordpress group-by sql-order-by

50
推荐指数
5
解决办法
4万
查看次数