我想查看每个月最后两天的预订是什么,我已经在最后一天做了但是我给了我一些错误的数据,我需要扩展它以获得不仅是最后一天而且每个月的最后两天
SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date IN (
SELECT MAX(Booking_date)
FROM [dbo].[Test_data]
GROUP BY MONTH(Booking_date), YEAR(Booking_date)
)
答案 0 :(得分:0)
这将为您提供预订当月最后2天的所有预订。如果booking_date存储时间,它将无法工作。
SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date between
DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 2 AND
DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 1
如果您在booking_date上存储时间:
SELECT Debit, Amount, Posted_Date, Posted_Time, Posted_By
FROM [dbo].[Test_data]
WHERE Booking_date >= DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0) - 2 AND
Booking_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, Booking_date) + 1, 0)
答案 1 :(得分:0)
另一种方法是使用calendar table,一旦您拥有如下所示的日历表,那么很容易获得所有信息
上面的日历表为我提供了所需的日期,您只需加入下一个
select t1.* from
dbo.testdate t1
join
(select date from calendar
where date>=convert(datetime,dateadd(day,-1,LDtOfMo)) and year=2013
) c
on c.date=t1.booking_Date
答案 2 :(得分:0)
SQL Server有一个名为SQL EOMonth() for calculating end of month
的新日期函数EOMONTH (getdate())
在月末结束后,您可以在前一天使用以下内容
DATEADD(dd,-1,@eomonth_date)