我有问题;我想获得倒数第二个日期而不考虑时间。这是我的查询:
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
答案 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
唯一的区别是使用CONVERT
将DATETIME
的值转换为DATE
,而不是DATE
,这是MySQL的唯一功能。
原始答案(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