【问题标题】:Grouping with latest time from SQL使用 SQL 中的最新时间分组
【发布时间】:2013-09-02 21:52:05
【问题描述】:

我正在尝试制作一个消息传递系统,但我现在被一个问题困扰太久了。 当我执行查询时,它会返回有时间的总行数,而不是最新行的时间。

有人知道我该怎么做吗?

这是我的查询:

SELECT i.`from` , SUM( i.`read` ) , COUNT( i.id ) , i.`time` , m.username
FROM  `messages` i
JOIN  `members` m ON i.`from` = m.`id` 
WHERE 1 
GROUP BY i.`from` 
ORDER BY i.`time` 

我试过了

MAX(i.`time`)

但这不起作用。

不知道出了什么问题,但现在可以了。 如果有人想知道如何和什么,这是新的查询。

SELECT i.`to`, m.`username`, max(i.`time`)
FROM `messages` i
JOIN `members` m ON i.`to` = m.`id`
WHERE i.`from` = ?
GROUP BY i.`from`
ORDER BY i.`time`

【问题讨论】:

    标签: mysql sql datetime group-by max


    【解决方案1】:

    如果你只想要最新的时间:

    SELECT i.`time`
    FROM  `messages` i
    JOIN  `members` m ON i.`from` = m.`id` 
    ORDER BY i.`time` DESC
    FETCH FIRST 1 ROW ONLY
    

    top 1 或您的数据库支持的任何风格。

    如果你想要每个from,那么这个:

    SELECT i.`from`, max(i.`time`)
    FROM  `messages` i
    JOIN  `members` m ON i.`from` = m.`id` 
    GROUP BY i.`from`
    ORDER BY 2
    

    但从你的问题来看,我假设你已经尝试过了?

    【讨论】:

    • 我需要多个结果。所以查询返回多行。
    • 但是多个结果是什么? max(time)from?
    • 不,我只需要 1 次,但在我成为您的职位之前,我就开始工作了。还是谢谢你^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多