如何计算不同的记录SQL?

How to COUNT DISTINCT record SQL?

我有一个脚本来计算每年一次注册的不同 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 在特定年份的一月、二月和三月注册,我希望它被计算一次,但在最近一次注册的月份内。

你可以用子查询来完成

SELECT 
  COUNT(*) 
FROM
  (SELECT DISTINCT 
     id,
     MONTH(reg_date), 
     YEAR(reg_date)
   FROM 
     reg_tbl
   WHERE 
     YEAR(reg_date) IN (2013, 2014, 2015)) Data

希望对您有所帮助

首先,您需要按年份汇总数据,以获得该年份每个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 仅 returns 一行。