mysql - 查询最新日期记录

标签 mysql sql sql-server

我的 table

id  home  datetime     player   resource
---|-----|------------|--------|---------
1  | 10  | 04/03/2009 | john   | 399 
2  | 11  | 04/03/2009 | juliet | 244
5  | 12  | 04/03/2009 | borat  | 555
3  | 10  | 03/03/2009 | john   | 300
4  | 11  | 03/03/2009 | juliet | 200
6  | 12  | 03/03/2009 | borat  | 500
7  | 13  | 24/12/2008 | borat  | 600
8  | 13  | 01/01/2009 | borat  | 700

结果将选择最新的 2 个日期之间的所有记录如何为此编写查询

最佳答案

您可以为此使用 DENSE_RANK:

SELECT id, home, [datetime], player, resource
FROM (
  SELECT id, home, [datetime], player, resource,
         DENSE_RANK() OVER (ORDER BY [datetime] DESC) AS rnk
  FROM mytable) AS t
WHERE t.rnk <= 2

DENSE_RANK 为与最新 日期值相关的所有记录分配值 1,为与第二新 相关的所有记录分配值 2 em> 日期值。

输出:

id  home    datetime            player  resource
=================================================
7   13  2009-12-12 02:00:00.000 borat   600
1   10  2009-04-03 03:00:00.000 john    399
2   11  2009-04-03 03:00:00.000 juliet  244
5   12  2009-04-03 03:00:00.000 borat   555

在 MySQL 中,您可以使用变量模拟 DENSE_RANK:

SELECT id, `datetime`, player, resource
FROM (
  SELECT id, `datetime`, player, resource,
         @rn := IF(@dt = `datetime`, @rn, 
                   IF(@dt := `datetime`, @rn + 1, @rn + 1)) AS rnk
  FROM mytable
  CROSS JOIN (SELECT @rn := 0, @dt := '1900-01-01') AS vars
  ORDER BY `datetime` DESC) AS t
WHERE t.rnk <= 2

Demo here

关于mysql - 查询最新日期记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716169/

相关文章:

php - 条件SQL取决于数据是否存在

php - 显示两个不同表中的数据

mysql - 如何在web2py中设置多列唯一

sql - SSRS 2008 不会从存储过程返回正确的数据集

sql-server - 在递归 SQL 查询上对多个父/子进行排序

SQL Server : Count based on date and two different times

mysql - MySQL 中的 LEFT JOIN 给出与 INNER 或 RIGHT JOIN 相同的结果

sql - 如何从 azure sql 中删除损坏的数据库

mysql - SQL 出现次数,汇总查询

sql - 如何在 SQL Server 中将日期正确转换为 ISO-8601 周数格式?