如何计算不同的记录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 一行。
我有一个脚本来计算每年一次注册的不同 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 一行。