我想从命中表中获取最后一天的结果。 最后一天意味着如果我在2013年10月28日上午7点运行查询,它应该返回之间的结果 00h:27/10/2013和24h:27/10/2013。
这是我的查询:
SELECT COUNT(ID) FROM [tblHit] AS V WHERE HitDate between
DATEADD(day, -1, convert(date, GETDATE())) and convert(date, GETDATE())
此查询是否获得结果?
唯一困扰我的是,如果我在
之间进行检查convert(date, GETDATE())
小时也包括在内,结果出错了。
答案 0 :(得分:2)
SELECT ...
FROM ...
WHERE HitDate >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())-1, 0) -- Start of the previous day
AND HitDate < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) -- Start of the current day
答案 1 :(得分:2)
Declare @Yesterday date = DateAdd(day, -1, Getdate())
SELECT COUNT(ID) FROM [tblHit] AS V
WHERE HitDate >= @Yesterday and HitDate < DateAdd(day, 1, @Yesterday)
答案 2 :(得分:-1)
我不确定你在'最后一天'的意思
如果您的意思是想要为昨天选择记录,那么您可以
Select *
From tblHit
Where cast(hit_date as date) = dateadd(d, -1, cast(getdate() as date))
如果您的意思是想要最新一天的记录,那么您可以使用DENSE_RANK()
Select *
From (
Select *, dense_rank() over (order by cast(hit_date as date) desc) dr
From tblHit
) t
Where dr=1
如果您的意思是想要第二天的最新记录,那么再次使用DENSE_RANK()
只需稍微更改标准
Select *
From (
Select *, dense_rank() over (order by cast(hit_date as date) desc) dr
From tblHit
) t
Where dr=2