我有一个表,其中包含多个月中每个月的多个记录。有人可以帮我编写一个只返回每个月最后一天的查询。
答案 0 :(得分:13)
SQL Server(其他DBMS的工作方式相同或非常类似):
SELECT
*
FROM
YourTable
WHERE
DateField IN (
SELECT MAX(DateField)
FROM YourTable
GROUP BY MONTH(DateField), YEAR(DateField)
)
DateField
上的索引在这里很有用。
PS:如果您的DateField
包含时间值,则上述内容将为您提供每月的最后一条记录,而非最后一天的记录。在这种情况下,请使用方法在进行比较之前将日期时间减少到其日期值,例如this one。
答案 1 :(得分:4)
我能找到最简单的方法来确定表中的日期字段是否是月末,只需添加一天并检查 日是否为1。
where DAY(DATEADD(day, 1, AsOfDate)) = 1
如果你使用它作为你的条件(假设AsOfDate是你正在寻找的日期字段),那么它只会返回AsOfDate是该月最后一天的记录。
答案 2 :(得分:2)
在SQL Server中,这是我通常相对于任意时间点到达该月的最后一天的方式:
select dateadd(day,-day(dateadd(month,1,current_timestamp)) , dateadd(month,1,current_timestamp) )
简而言之:
瞧!您是包含参考时间点的月份的最后一天。
获得本月的第一天更简单:
select dateadd(day,-(day(current_timestamp)-1),current_timestamp)
剥离/标准化外来时间组件留给读者练习。
答案 3 :(得分:0)
如果您可以使用EOMONTH()函数(例如SQL Server)。它返回给定日期的一个月中的最后日期。
findById
或者,你可以使用一些日期数学。
select distinct
Date
from DateTable
Where Date = EOMONTH(Date)
答案 4 :(得分:0)
这应该适用于Oracle DB
select distinct last_day(trunc(sysdate - rownum)) dt
from dual
connect by rownum < 430
order by 1
答案 5 :(得分:0)
我做了以下工作,效果很好。我还想要 当月的最长日期 。这是我输出的内容。注意7月的最后一个日期是24日。我在2017年7月24日拉了它,结果
Year Month KPI_Date
2017 4 2017-04-28
2017 5 2017-05-31
2017 6 2017-06-30
2017 7 2017-07-24
SELECT B.Year ,
B.Month ,
MAX(DateField) KPI_Date
FROM Table A
INNER JOIN ( SELECT DISTINCT
YEAR(EOMONTH(DateField)) year ,
MONTH(EOMONTH(DateField)) month
FROM Table
) B ON YEAR(A.DateField) = B.year
AND MONTH(A.DateField) = B.Month
GROUP BY B.Year ,
B.Month
答案 6 :(得分:0)
SELECT * FROM YourTableName WHERE anyfilter
AND "DATE" IN (SELECT MAX(NameofDATE_Column) FROM YourTableName WHERE
anyfilter GROUP BY
TO_CHAR(NameofDATE_Column,'MONTH'),TO_CHAR(NameofDATE_Column,'YYYY'));
注意:此答案适用于Oracle DB
答案 7 :(得分:0)
这就是我刚刚解决的方法。 day_date
是日期字段,calendar
是保存日期的表。
SELECT cast(datepart(year, day_date) AS VARCHAR)
+ '-'
+ cast(datepart(month, day_date) AS VARCHAR)
+ '-'
+ cast(max(DATEPART(day, day_date)) AS VARCHAR) 'DATE'
FROM calendar
GROUP BY datepart(year, day_date)
,datepart(month, day_date)
ORDER BY 1
答案 8 :(得分:-1)
获取月份最后一天的简单方法是获取下个月的第一天并减去1。