2013-10-28 85 views
0

我想從我的命中表中得到最後一天的結果。 最後一天意味着如果我在28/10/2013上午7點運行查詢,它應返回 00h:27/10/2013和24:27/10/2013之間的結果。SQL查詢從時間段拆分日期部分

這裏是我的查詢:

SELECT COUNT(ID) FROM [tblHit] AS V WHERE HitDate between 
DATEADD(day, -1, convert(date, GETDATE())) and convert(date, GETDATE()) 

在此查詢得到的結果?

打擾我的唯一的事情是,如果我檢查

之間

convert(date, GETDATE()) 
小時被收錄得和結果出錯。

回答

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 
2
Declare @Yesterday date = DateAdd(day, -1, Getdate()) 

SELECT COUNT(ID) FROM [tblHit] AS V 
WHERE HitDate >= @Yesterday and HitDate < DateAdd(day, 1, @Yesterday) 
-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 
+0

我不知道該查詢甚至如何接近解決的問題。 –

+0

我不確定'最後一天'的意思是什麼,編輯了一些答案的解釋。 –