我有一个名为NETWORK的表。在这个表中我有Card日期,和。我想按年和月计算值为<= 50的所有不同卡片。
场景:如该卡在一个月内有10笔交易,而"所有值"少于50,则应计算一次(单独计数);否则,如果其中一个Value大于50,则不应考虑它。
样本数据:
1. Card Date Value
443138XXXXXX0977 2020-01-13 42
443138XXXXXX0977 2020-01-04 50
443138XXXXXX0977 2020-01-22 43
443138XXXXXX0977 2020-02-22 29
524417XXXXXX7034 2020-01-10 38
524417XXXXXX7034 2020-01-07 35
443138XXXXXX4095 2020-01-28 17
443138XXXXXX4095 2020-01-02 37
443138XXXXXX4095 2020-01-27 55
471365XXXXXX0755 2021-03-10 69
471365XXXXXX0756 2021-03-10 22
谢谢。
SELECT
t1.Card,
COUNT(*)
FROM Table t1
WHERE Value <= 50 AND NOT EXISTS(SELECT 1 FROM Table t2 WHERE t1.Card=t2.Card AND t2.Value>50)
GROUP BY
t1.Card,
Year(t1.Date), Month(t1.Date)
HAVING Count(*)=10
- WHERE将过滤值为<= 50的所有行,仅过滤值>50不存在的行
- HAVING将过滤分组记录计数为10
应该和你说的一模一样:
Select count(distinct Card)
From Network
Where Value<=50