首页 > 解决方案 > 如何让倒数第二个日期区分日期但不考虑时间

问题描述

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

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

标签: sqlsql-server

解决方案


更新

此查询将在 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值转换为 a DATE,而不是DATEMySQL 唯一的函数。

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

dbfiddle 上的演示


推荐阅读