如何COUNT DISTINCT记录SQL?

时间:2015-03-23 22:02:43

标签: sql informix

我有一个脚本可以计算每年注册一次的不同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月注册,我希望计算一次,但在最近注册的月份内。

2 个答案:

答案 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

希望这有帮助