我有一張如下所示的表格。每次有人發言時,都會有一個新行,其中包含日期、發言者和每個評論唯一的評論 ID。該表有 3 年的資料。
我想做的是在 SQL 中找到一個解決方案,該解決方案可以優雅地挑選過去 1 年中在 2 天時間范圍內發言超過 6 次的人。
例如,從示例表中,我想看到的是:
- A: 2021-10-20 & 2021-10-19, 6 次
- B: 2021-10-19 & 2021-10-18, 7 次
無關緊要的是:
- B: 2021-10-20 & 2021-10-19, 3次
- A: 2021-10-19 & 2021-10-18, 4 次
| 日期 | 人 | 評論編號 |
|---|---|---|
| 2021-10-20 | 一種 | 菲瓦吉亞 |
| 2021-10-20 | 乙 | 阿費瓦斯 |
| 2021-10-20 | 一種 | 伊沃克道 |
| 2021-10-20 | 一種 | 奧伊達雷克 |
| 2021-10-20 | 一種 | 斯凱德克 |
| 2021-10-19 | 乙 | 凱亞切斯 |
| 2021-10-19 | 一種 | 沃威克德 |
| 2021-10-19 | 乙 | 圣維克拉夫 |
| 2021-10-19 | 一種 | 詩歌 |
| 2021-10-18 | 一種 | 比瓦爾德威 |
| 2021-10-18 | 一種 | 代購 |
| 2021-10-18 | 乙 | zfdewoaierje |
| 2021-10-18 | 乙 | kfewajireuifd |
| 2021-10-18 | 乙 | 無名小卒 |
| 2021-10-18 | 乙 | 弗菲亞杰爾瓦夫 |
| 2021-10-18 | 乙 | yhfewaurhdfj |
uj5u.com熱心網友回復:
讓我們記錄“2021-10-20 | A”并連接同一個表以查找 2 天范圍內的其他行。聚合它們(分組依據)并過濾(具有)...
SELECT DISTINCT
C1.[Date] AS FromDate,
C1.[Date] 1 AS ToDate,
C1.[Person],
COUNT(1)
FROM Comments C1
JOIN Comments C2
ON C2.Person >= C1.Person
and C2.[Date] >= C1.[Date]
and C2.[Date] <= C1.[Date] 1
GROUP BY C1.[Date], C1.[Person]
HAVING COUNT(1) >= 6
uj5u.com熱心網友回復:
看看這個:
declare @MyTable as table (
[Date] datetime,
Person varchar(3),
CommentID varchar(50)
)
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('20/10/21', 'A', 'fjeiwarjea')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('20/10/21', 'B', 'ahfeawas')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('20/10/21', 'A', 'iewaokdow')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('20/10/21', 'A', 'oweidarek')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('20/10/21', 'A', 'sqoeidke')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('19/10/21', 'B', 'qejacjes')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('19/10/21', 'A', 'voewaiekd')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('19/10/21', 'B', 'saoweikladf')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('19/10/21', 'A', 'poewieakre')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'A', 'biewaldcwe')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'A', 'deaireal')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'B', 'zfdewoaierje')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'B', 'kfewajireuifd')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'B', 'mfeaiwruei')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'B', 'wrfeiarjeilwaf')
INSERT INTO @MyTable ([Date], Person, CommentID) VALUES ('18/10/21', 'B', 'yhfewaurhdfj');
with Comments (FromDate, ToDate, Person, Times)
as
(
select t1.[Date] FromDate, DATEADD(d, -1, t1.[date]) ToDate, t1.Person,
(
select COUNT(*) from @MyTable t2 where t2.Person = t1.Person and t2.[Date] between DATEADD(d, -1, t1.[date]) and t1.[date]
) Times
from @MyTable t1
where t1.[Date] > DATEADD(yy, -1, getdate()) -- just last year
group by t1.[Date], DATEADD(d, -1, t1.[date]), t1.Person
)
select * from Comments where Times >= 6
這將回傳:
| 從日期 | 迄今為止 | 人 | 時代 |
|---|---|---|---|
| 2021-10-19 00:00:00.000 | 2021-10-18 00:00:00.000 | 乙 | 7 |
| 2021-10-20 00:00:00.000 | 2021-10-19 00:00:00.000 | 一種 | 6 |
我認為代碼是自我解釋的,但是如果您需要一些解釋,我可以更新答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327548.html
上一篇:嵌套或多個case函式
