如何获得倒数第二个日期以区分日期但不考虑时间

时间:2019-04-11 23:20:24

标签: sql sql-server

我有问题;我想获得倒数第二个日期而不考虑时间。这是我的查询:

select max_date,
       (select max(t2.date) from table t2 where t2.date<t1.max_date)
from (select max(max_date) from table) as t1;

我的数据是:

2018-06-12 10:43:45.000,
2018-06-12 10:42:45.000,
2018-06-12 10:41:45.000,
2018-05-12 10:43:45.000,

我目前得到:

2018-06-12 10:43:45.000,
2018-06-12 10:42:45.000,

但我想要

2018-06-12 10:43:45.000,
2018-05-12 10:43:45.000

1 个答案:

答案 0 :(得分:1)

更新

此查询将在SQL Server上运行:

SELECT max_date,
       (SELECT MAX(t2.date) 
        FROM test t2 
        WHERE CONVERT(DATE, t2.date) < CONVERT(DATE, t1.max_date)) AS penultimate_date
FROM (SELECT MAX(date) AS max_date 
      FROM test) t1

唯一的区别是使用CONVERTDATETIME的值转换为DATE,而不是DATE,这是MySQL的唯一功能。

Demo on dbfiddle.uk

原始答案(MySQL,因为该问题当时仅被标记为sql

查询的问题是您将日期作为完整时间戳进行比较,而不是仅查看日期部分。这就是为什么您从同一天而不是前一天获得以前的值的原因。将查询更改为此:

SELECT max_date,
       (SELECT MAX(t2.date) 
        FROM test t2 
        WHERE DATE(t2.date) < DATE(t1.max_date)) AS penultimate_date
FROM (SELECT MAX(date) AS max_date 
      FROM test) t1;

输出:

max_date            penultimate_date
2018-06-12 10:43:45 2018-05-12 10:43:45

Demo on dbfiddle