我正在寻找一个显示过去最新日期的SQL查询。例如,我有以下列:
import mpl_toolkits.basemap as bm
mapproj = bm.Basemap(ax=ax1,projection='cyl',llcrnrlat=lat_mn, \
llcrnrlon= lon_mn,urcrnrlat= lat_mx, urcrnrlon=lon_mx)
mapproj.drawmeridians(lonlines, labels=[0,0,1,0],rotation=45)
期望的输出:
CLIENT DATE
1234567890 2017-01-01
1234567890 2018-05-17
1234567890 2018-05-18
1234567890 2018-09-18
我尝试过 getdate()和 MAX()的组合无济于事。任何帮助,将不胜感激。谢谢大家。
答案 0 :(得分:1)
您可以使用order by
和fetch first
:
select t.*
from t
where t.date < current_date
order by t.date desc
fetch first 1 row only;
这基本上是ANSI标准语法。有些数据库更喜欢limit
或top
到fetch first
。有些人更喜欢getdate()
或sysdate
或当前日期的其他内容。但逻辑是相同的,即使语法有所不同。
答案 1 :(得分:0)
select max(date) from t group by client having max(date) < getdate()
答案 2 :(得分:0)
您可以使用Windows功能和这样的cte:
用cte作为 (选择客户, 日期, Row_number()over(按客户订单按日期desc分区)as date_count 来自[tableName])
选择* 来自cte 其中date_count = 1
row_number语法可能有点偏,但应该给你一个想法。
答案 3 :(得分:0)
您没有指定SQL方言。以下是一些可能与SQL Server一起使用的方法。
方法A
首先,选择最近的两条记录,然后从中选择最早的记录:
/* from the two most recent records, choose the oldest */
SELECT TOP 1
[Client], [Date]
FROM (
/* choose the two most recent records */
SELECT TOP 2
[Client], [Date]
FROM [TableName]
ORDER BY [Date] DESC) x
ORDER BY [Date] ASC
链接到SQL小提琴:http://sqlfiddle.com/#!18/38054/2
方法B
找到最大的日期值并指定一个过滤器,以选择日期小于该值的所有记录。从该组中选择最近的日期:
SELECT TOP 1
[Client], [Date]
FROM [TableName]
WHERE [Date] < (SELECT MAX([Date]) FROM [TableName])
ORDER BY [Date] Desc
链接到SQL小提琴:http://sqlfiddle.com/#!18/38054/6