0

我想从我的命中表中获得最后一天的结果。最后一天意味着如果我在 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())

小时也被包括在内,结果出错了。

4

3 回答 3

2
Declare @Yesterday date = DateAdd(day, -1, Getdate())

SELECT  COUNT(ID) FROM [tblHit] AS V 
WHERE  HitDate >= @Yesterday and HitDate < DateAdd(day, 1, @Yesterday)
于 2013-10-28T21:14:29.773 回答
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
于 2013-10-28T21:11:15.163 回答
-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
于 2013-10-28T21:14:45.960 回答