我有一个脚本可以计算每年注册一次的不同ID
SELECT COUNT(DISTINCT id),
MONTH(reg_date), YEAR(reg_date)
FROM reg_tbl
WHERE YEAR(reg_date) IN (2013, 2014, 2015)
我希望每年只对每个id
数据进行一次计数,即使它被多次返回。我还希望id在其注册的最大月份计算。也就是说,如果id
在特定年份的1月,2月和3月注册,我希望计算一次,但在最近注册的月份内。
答案 0 :(得分:4)
首先,您需要按年汇总数据,以获取该年度每个ID的最新值。然后,您可以按月计算:
SELECT COUNT(*), MONTH(reg_date), YEAR(reg_date)
FROM (SELECT id, YEAR(reg_date) as yyyy, MAX(reg_date) as reg_date
FROM reg_tbl rt
GROUP BY id, YEAR(reg_date)
) rty
WHERE yyyy IN (2013, 2014, 2015)
GROUP BY MONTH(reg_date), YEAR(reg_date);
注意:外部查询中不再需要count(distinct)
,因为子查询每年每个ID只返回一行。
答案 1 :(得分:0)
您可以使用子查询
来完成SELECT
COUNT(*)
FROM
(SELECT DISTINCT
id,
MONTH(reg_date),
YEAR(reg_date)
FROM
reg_tbl
WHERE
YEAR(reg_date) IN (2013, 2014, 2015)) Data
希望这有帮助