[英]t-SQL Grouping by Day and Hours
我需要確定一周和周末的銷售數量,但應將周末計算為星期五下午6點到星期一上午9點之間。
例如,如果我有以下數據:
2017-02-09 14:00
2017-02-09 19:00
2017-02-10 17:15
2017-02-10 18:22
2017-02-11 11:00
2017-02-11 16:00
2017-02-12 19:30
2017-02-13 08:00
2017-02-14 14:00
我會得到以下信息:
Weekday: 4
Weekend: 5
使用以下方法很容易獲得每天的銷售額:
select count(*) as total, dateadd(DAY,0, datediff(day,0, created) as created
from sales
group by dateadd(DAY,0, datediff(day,0, created))
但是我想不起來如何結合時間和天數來獲取所需的信息。
這只是一個復雜的case
陳述。 您可以使用outer apply
來執行此操作,並使用該值進行聚合:
select weekpart, count(*)
from sales s outer apply
(values (case when datename(dw, created) in ('Tuesday', 'Wednesday', 'Thursday') then 'Weekday'
when datename(dw, created) = 'Monday' and
datepart(hh, created) >= 9
then 'Weekday'
when datename(dw, created) = 'Friday' and
datepart(hh, created) < 18
then 'Weekday'
else 'Weekend'
end)
) v(weekpart)
group by v.weekpart;
這有意地在工作日使用datename()
。 星期幾受國際化設置的影響。 所有講英語的國家/地區在工作日都使用相同的名稱,但是當地的約定可能會影響工作日的開始日期。 我還認為,對於非英語設置,代碼非常清楚為什么不起作用-與“ 1”相比是不可行的。
試試這樣的事情:
SELECT week_or_weekend, count(*)
FROM
(
SELECT 1 as cnt, CASE WHEN
DATEPART(DW, created) in (7,1)
OR
(DATEPART(DW, created) 6 AND DATEPART(hour, created) >= 18)
OR
(DATEPART(DW, created) 2 AND DATEPART(hour, created) < 9)
THEN 'WEEKEND'
ELSE 'WEEK'
END week_or_weekend
FROM sales
) q
GROUP BY week_or_weekend
說明:DW = 7代表星期六,1代表星期日,6代表星期五,2代表星期一,我將1作為cnt進行澄清,因為除非您在子查詢中添加了一個與眾不同的內容,否則它無用。 您可以在1個查詢中執行此操作,但必須重復兩次大的“ case when end”語句。
with CTE as
(
select created,
case when
(datepart(dw,[created]) = 6 and datepart(hh,created) >= 18) or
(datepart(dw,created)=7 or datepart(dw,created)=1) or
(datepart(dw,[created]) = 2 and datepart(hh,created) <= 9)
then 'Weekend'
else 'Weekday' end as weekType
from Table1)
select weekType, count(1)
from CTE
group by weekType
在此處檢查: http : //sqlfiddle.com/#!6/4fbb0/8
這將使您開始:
with CTE as
(
select dateadd(hh, datepart(hh,created), dateadd(dd,0, datediff(dd,0,created))) as created_dayhour,
someothercolumn,
datepart(dw,created) as create_day,
datepart(hh, created) as create_hour
from sales
)
select created_dayhour, count(someothercolumn)
from CTE
group by created_dayhour
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.