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包含时间值,上面将给出每个月的最后一条记录,而不是最后一天的记录.在这种情况下,使用方法在进行比较之前将日期时间减少到其日期值,例如这个.
我可以找到的最简单的方法来确定表中的日期字段是否为月末,只需添加一天并检查该天是否为1。
where DAY(DATEADD(day, 1, AsOfDate)) = 1
Run Code Online (Sandbox Code Playgroud)
如果将其用作条件(假设AsOfDate是您要查找的日期字段),则它将仅返回AsOfDate是该月的最后一天的记录。
如果您可以使用 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)