我有一張表,其中包含多個年份中每個月中每天的多個記錄。有人可以幫我寫一個查詢,只會返回每個月的最後一天。僅返回每個月的最後一天,使用SQL
回答
SQL服務器(數據庫管理系統等工作,將相同或非常下同):
SELECT
*
FROM
YourTable
WHERE
DateField IN (
SELECT MAX(DateField)
FROM YourTable
GROUP BY MONTH(DateField), YEAR(DateField)
)
的指數DateField
是有幫助這裏。
PS:如果你的DateField
包含時間值,上述會給你每個月的最後記錄,而不是最後一天的記錄。在這種情況下,請在進行比較之前使用一種方法將日期時間縮短爲日期值,例如this one。
其純粹的日期,所以應該工作罰款..謝謝 – Matt 2011-05-03 07:15:27
一種簡單的方式來獲得一個月的最後一天是獲得下個月的第一天,減去1
這仍然不能回答這個問題。 – FistOfFury 2016-04-08 14:19:07
@FistOfFury這是一個指針如何解決它。由於沒有標準的兼容SQL數據庫,我不能給你工作SQL代碼,直到你告訴我你使用哪個數據庫。 – 2016-04-19 12:26:46
在SQL Server中,這是怎麼了,我通常去的最後一天相對月到任意時間點:
select dateadd(day,-day(dateadd(month,1,current_timestamp)) , dateadd(month,1,current_timestamp))
一言以蔽之:
- 從您的參考點的時間,
- 加1個月,
- 然後,從所得到的值中減去其以天來計算的月份。
瞧!本月的最後一天包含您的參考點。
獲得該月的第一天是簡單的:
select dateadd(day,-(day(current_timestamp)-1),current_timestamp)
- 從您的參考點的時間,
- 減(天數),比目前天OF- 1少月份組件。
剝離/標準化無關時間部分留給讀者作爲練習。
如果EOMONTH()函數可用(例如SQL Server),請使用EOMONTH()函數。它返回給定日期的一個月中的最後一個日期。
select distinct
Date
from DateTable
Where Date = EOMONTH(Date)
或者,您可以使用一些日期數學。
select distinct
Date
from DateTable
where Date = DATEADD(MONTH, DATEDIFF(MONTH, -1, Date)-1, -1)
這應該對Oracle數據庫
select distinct last_day(trunc(sysdate - rownum)) dt
from dual
connect by rownum < 430
order by 1
工作,我做了以下內容,而且合作的很好。我還希望本月的最大日期。這是我的輸出。注意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
我能找到,以確定如果表中的日期字段是月末最簡單的方法,是簡單地增加一天,並檢查是否那天爲1
where DAY(DATEADD(day, 1, AsOfDate)) = 1
如果使用作爲你的條件(假設AsOfDate是你正在尋找的日期字段),那麼它只會返回記錄,其中AsOfDate是這個月的最後一天。
我發現這對我來說是最乾淨的解決方案;在表格中包含最後一個日期的行的最佳方式是什麼? (DAY(DATEADD(day,1,AsOfDate))= 1或AsOfDate =(從[Table]中選擇max(AsOfDate)))? – StackoverflowLoser 2018-01-10 22:49:30
應該這樣做,是的。這樣你會返回該月的最後一天或最後一天有空。 唯一的問題是,你可能會得到多個結果,不知道如果這是一個問題 – 2018-01-12 00:23:30
謝謝,好點重新結果;只需要注意,在我的最終解決方案中,我將max datetime設置爲腳本頂部的變量,並將其用於性能測試。 – StackoverflowLoser 2018-01-12 21:00:53
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數據庫
- 1. SQL返回第一天,每月的表
- 2. 返回月份的最後一天
- 3. 選擇每個月的最後一天
- 4. .NET中每個月的最後一天
- 5. PHP - MYSQL:每月最後12個月的第一天到最後一天
- 6. SQL SELECT每月的第一天和最後一天。
- 7. SQL Server上個月的最後一天
- 8. 返回日期前1個月前的最後一天()
- 9. 選擇每個月的最後7天
- 10. 在SQL中獲取每月的最後一天
- 11. php:strtotime(「2004年12月31日+6月」));不返回六月的最後一天
- 12. 本月的最後一天?
- 13. 一個月中每天發生的最後一筆記錄
- 14. Moment.js返回1作爲月份的最後一天
- 15. Quartz.net cron表達式總是返回月份的最後一天?
- 16. 第一個和最後16天每個月執行一次sql腳本。
- 17. SQL Server:WHERE子句只返回月份的最後一天範圍內的值
- 18. 如何獲得第一天和上個月的最後一個使用sql
- 19. 如何在本月的最後一天使用SQL Reporting Services
- 20. 使用javascript返回一個月份中每一天的日期對象數組
- 21. 在每個月的最後一天運行的Cron表達式
- 22. MySQL僅返回特定ID的最後一天的行
- 23. 如何僅使用Datepicker Jquery啓用月份的最後幾天?
- 24. 每ping一次返回ping結果,而不僅僅是最後
- 25. 如何獲得一個月(SQL Server)的最後一天
- 26. PHP DateInterval最後一天沒有返回月份
- 27. 每個月的第一天
- 28. QDateTimeEdit選擇每個月的最後一天
- 29. 如何獲得每個月的最後一天?
- 30. 返回的最後6個月
多次重複的 - 請在你的問題的相關章節搜索,以便 – 2011-05-03 06:51:06
看到。我相信你會在那裏找到答案。 – 2011-05-03 06:51:59
[在SQL中獲取本月的最後一天]可能的副本(http://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql) – codingbadger 2011-05-03 06:53:26