使用SQL返回每个月的最后一天

Mat*_*att 10 sql

我有一个表,其中包含多个月中每个月的多个记录.有人可以帮我编写一个只返回每月最后一天的查询.

Tom*_*lak 16

SQL Server(其他DBMS的工作方式相同或非常相似):

SELECT
  *
FROM
  YourTable
WHERE
  DateField IN (
    SELECT   MAX(DateField)
    FROM     YourTable
    GROUP BY MONTH(DateField), YEAR(DateField)
  )
Run Code Online (Sandbox Code Playgroud)

索引在DateField这里很有帮助.

PS:如果您DateField包含时间值,上面将给出每个月的最后一条记录,而不是最后一天的记录.在这种情况下,使用方法在进行比较之前将日期时间减少到其日期值,例如这个.


Jav*_*ort 6

我可以找到的最简单的方法来确定表中的日期字段是否为月末,只需添加一天并检查天是否为1。

where DAY(DATEADD(day, 1, AsOfDate)) = 1
Run Code Online (Sandbox Code Playgroud)

如果将其用作条件(假设AsOfDate是您要查找的日期字段),则它将仅返回AsOfDate是该月的最后一天的记录。


Fis*_*ury 5

如果您可以使用 EOMONTH() 函数(例如 SQL Server),请使用它。它返回给定日期的一个月中的最后一个日期。

select distinct
Date 
from DateTable
Where Date = EOMONTH(Date)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用一些日期数学。

select distinct
Date
from DateTable
where Date = DATEADD(MONTH, DATEDIFF(MONTH, -1, Date)-1, -1)
Run Code Online (Sandbox Code Playgroud)