mysql - SQL 查询返回查询中的最高日期值

标签 mysql sql greatest-n-per-group

我正在尝试运行查询以执行以下操作:
返回表中给定日期范围内的所有最新条目。
目前我正在使用这个查询

SELECT id FROM schedule WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07'

它从如下所示的调度表中返回记录 1、2、3、4、5

时间表。

+----+------------+-------------+-----------------+------------+----------+
| id | eventdate  | resource_id |      text       |  added_on  | added_by |
+----+------------+-------------+-----------------+------------+----------+
|  1 | 2014-09-05 |           1 | Some old text   | 2014-08-01 | Sam      |
|  2 | 2014-09-05 |           1 | Some newer text | 2014-09-01 | Jordan   |
|  3 | 2014-09-06 |           1 | another day     | 2014-09-03 | Jordan   |
|  4 | 2014-09-05 |           1 | Most recent     | 2014-09-10 | Jordan   |
|  5 | 2014-09-07 |           2 | Other resource  | 2014-09-09 | Sam      |
+----+------------+-------------+-----------------+------------+----------+

我试图只返回指定日期范围内的唯一记录,其中应该返回的唯一记录是那些在 added_on 列中具有最高日期时间戳的记录。

在上面的示例中,我只想返回记录 3、4、5。记录 1 和 2 已被记录 4 取代。

**请注意:added_on 列的类型为日期时间戳 (yyyy-mm-dd HH:mm:ss),为清楚起见,已将其删除 **

我不知道查询会返回多少行,决定记录唯一性的信息是eventdate, resource_id and added_on
即每天每个资源应该只返回一条记录,并且这条记录应该具有最高的 added_on 值

最佳答案

SELECT s1.* FROM schedule s1  
inner join (select max(id) as id1 from schedule WHERE eventdate BETWEEN '2014-09-01' AND '2014-09-07' group by eventdate,resource_id ) as s2 on s2.id1=s1.id 

它会为你工作

关于mysql - SQL 查询返回查询中的最高日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758233/

相关文章:

php - 将 3 个 MYSQL 查询优化为一个

mysql - 如何创建将行转换为列的 MySQL 查询?

sql - 将特定的有界数插入SQL Server中的列

sql - 在SQL中联接表时出现问题

mysql - 我应该使用 Ruby 进行计算,还是应该使用 MySQL 进行计算?

mysql 选择7天内某天的最后一个值

php - 错误连接到Cloud 9中的DB

mysql - 选择具有非空值列的记录

mysql - 使用 case 语句 mysql 添加日期间隔

sql - 300000 行的 DISTINCT ON 慢