mysql - 来自唯一 mysql 索引的最新日期时间

标签 mysql greatest-n-per-group

我有一张 table 。它有一个 id 的 pk 和一个 [service, check, datetime] 的索引。

id  service  check   datetime  score
---|-------|-------|----------|-----
1  | 1     |  4    |4/03/2009 | 399
2  | 2     |  4    |4/03/2009 | 522
3  | 1     |  5    |4/03/2009 | 244
4  | 2     |  5    |4/03/2009 | 555
5  | 1     |  4    |4/04/2009 | 111
6  | 2     |  4    |4/04/2009 | 322
7  | 1     |  5    |4/05/2009 | 455
8  | 2     |  5    |4/05/2009 | 675

给定服务 2,我需要为每个唯一检查选择具有最大日期的行。所以我的结果将如下表所示。

id  service  check   datetime  score
---|-------|-------|----------|-----
6  | 2     |  4    |4/04/2009 | 322
8  | 2     |  5    |4/05/2009 | 675

有没有简短的查询?我拥有的最好的就是这个,但它返回了太多的支票。我只需要在最新日期时间进行唯一检查。

SELECT * FROM table where service=?;

最佳答案

首先您需要找出每张支票的最大日期

 SELECT `check`, MAX(`datetime`)
 FROM YourTable
 WHERE `service` = 2
 GROUP BY `check`

然后连接回来以获取其余数据。

 SELECT Y.*
 FROM YourTable Y
 JOIN ( SELECT `check`, MAX(`datetime`) as m_date
        FROM YourTable
        WHERE `service` = 2
        GROUP BY check) as `filter`
  ON Y.`service` = `filter`.service
 AND Y.`datetime` = `fiter`.m_date
 WHERE Y.`service` = 2

关于mysql - 来自唯一 mysql 索引的最新日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45949944/

相关文章:

MySQL 选择每组嵌套的前 n 条记录

sql - 使用单个 sql 查询选择多组行

sql - 在SQL中查找每个组对应的第N个值和平均值

sql - 选择第二个最新日期的条目

php - 如何在 MySQL/PHP 中选择行?

php - 更新的中文文本和PHP、MySql不正确

php - 使用 Jquery Mobile 的数据库

mysql - 禁用特定表的 BinLogging,在哪里执行参数更改

sql - 选择具有一列不同值的一行

mysql - Bash 包含不工作