如何在SQL中过去最近的日期

时间:2018-06-13 01:14:15

标签: sql date

我正在寻找一个显示过去最新日期的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()的组合无济于事。任何帮助,将不胜感激。谢谢大家。

4 个答案:

答案 0 :(得分:1)

您可以使用order byfetch first

select t.*
from t
where t.date < current_date
order by t.date desc
fetch first 1 row only;

这基本上是ANSI标准语法。有些数据库更喜欢limittopfetch 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