我有一個 SQL 表,其中的列
時間戳 | 地區 |
---|---|
2022-10-06 01:00:00.0000000 | 東方 |
2022-10-06 03:00:00.0000000 | 東方 |
2022-10-06 05:00:00.0000000 | 西方 |
2022-10-06 01:00:00.0000000 | 東方 |
2022-10-07 05:00:00.0000000 | 西方 |
2022-10-08 05:00:00.0000000 | 東方 |
2022-10-09 01:00:00.0000000 | 西方 |
2022-10-09 01:00:00.0000000 | 東方 |
所以我想按“Day”和“Region”對表格進行分組
時間戳 | 地區 | 數數 |
---|---|---|
2022-10-06 | 東方 | 3 |
2022-10-06 | 西方 | 1 |
2022-10-07 | 西方 | 1 |
2022-10-08 | 東方 | 1 |
2022-10-09 | 西方 | 1 |
2022-10-09 | 東方 | 1 |
所以我用 SQL 試試這個
SELECT
[region],
CONCAT( datepart(YEAR, [Timestamp]), '-', datepart(MONTH, [Timestamp]), '-', datepart(DAY, [Timestamp])) AS dayEvent,
FROM Table
GROUP BY [region], [dayEvent]
但我收到錯誤訊息“時間戳在選擇串列中無效,因為它既不包含在聚合函式或 GROUP BY 子句中。”
你能告訴我如何解決這個問題嗎?
uj5u.com熱心網友回復:
在 SQL Server 中,您可以通過使用cross apply來簡化它,它允許您在select和group by中參考它,以及convert函式來提取所需的日期:
select ts [Timestamp], Region, Count(*) [count]
from t
cross apply(values(Convert(Date, [Timestamp])))x(ts)
group by ts, Region;
示例小提琴
uj5u.com熱心網友回復:
我們可以cast(Timestamp as date)
,這會給我們想要的結果。
select cast(Timestamp as date) as Timestamp
,Region
,count(*) as count
from t
group by cast(Timestamp as date), Region
時間戳 | 地區 | 數數 |
---|---|---|
2022-10-06 | 東方 | 3 |
2022-10-08 | 東方 | 1 |
2022-10-09 | 東方 | 1 |
2022-10-06 | 西方 | 1 |
2022-10-07 | 西方 | 1 |
2022-10-09 | 西方 | 1 |
小提琴
uj5u.com熱心網友回復:
SELECT
[region],
CONCAT( datepart(YEAR, [Timestamp]), '-', datepart(MONTH, [Timestamp]), '-', datepart(DAY, [Timestamp])) AS dayEvent,
COUNT(*) AS Count
FROM Table
GROUP BY datepart(YEAR, [Timestamp]), datepart(MONTH, [Timestamp]), datepart(DAY, [Timestamp])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/522181.html
標籤:sql