使用 CASE 语句每月获取过去 4 年的数据 COUNT
Get the COUNT of data for last 4 years monthly by using CASE statement
我试过这个:
SELECT DISTINCT
MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -1, GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -2, GETDATE()) THEN CUSTOMER_ID END),
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END),
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) THEN CUSTOMER_ID END)
FROM
PATIENT_ENCOUNTERS
GROUP BY
MONTH(ENCOUNTER_DATE)
ORDER BY
MONTH(ENCOUNTER_DATE)
每个月的数据计数正在添加到下一年的同月。
我交叉检查了以下数据不匹配的查询
SELECT
YEAR(ENCOUNTER_DATE), COUNT(CUSTOMER_ID)
FROM
PATIENT_ENCOUNTERS
WHERE
ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE())
GROUP BY
YEAR(ENCOUNTER_DATE)
ORDER BY
YEAR(ENCOUNTER_DATE) DESC
有人可以仅使用 case 语句帮助我查找过去 4 年的每月数据吗?
您的问题是您设置的是开始日期而不是结束日期。尝试类似于以下内容。
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) AND ENCOUNTER_DATE < DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END)
试试这个:
SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
FROM PATIENT_ENCOUNTERS
GROUP BY MONTH(ENCOUNTER_DATE)
ORDER BY MONTH(ENCOUNTER_DATE)
在这里 YEAR(GETDATE())
我得到了当年的年份,YEAR(GETDATE())-1
得到了去年的年份部分,依此类推。然后我将今年与 encounter_date 年作为 year(encounter_date) = YEAR(GETDATE())
进行了比较,以获得那年的 customer_id
,它们按月分组。
获取年度累计计数:
SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
FROM PATIENT_ENCOUNTERS
GROUP BY MONTH(ENCOUNTER_DATE)
ORDER BY MONTH(ENCOUNTER_DATE)
我试过这个:
SELECT DISTINCT
MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -1, GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -2, GETDATE()) THEN CUSTOMER_ID END),
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END),
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) THEN CUSTOMER_ID END)
FROM
PATIENT_ENCOUNTERS
GROUP BY
MONTH(ENCOUNTER_DATE)
ORDER BY
MONTH(ENCOUNTER_DATE)
每个月的数据计数正在添加到下一年的同月。
我交叉检查了以下数据不匹配的查询
SELECT
YEAR(ENCOUNTER_DATE), COUNT(CUSTOMER_ID)
FROM
PATIENT_ENCOUNTERS
WHERE
ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE())
GROUP BY
YEAR(ENCOUNTER_DATE)
ORDER BY
YEAR(ENCOUNTER_DATE) DESC
有人可以仅使用 case 语句帮助我查找过去 4 年的每月数据吗?
您的问题是您设置的是开始日期而不是结束日期。尝试类似于以下内容。
COUNT(CASE WHEN ENCOUNTER_DATE >= DATEADD(YEAR, -4, GETDATE()) AND ENCOUNTER_DATE < DATEADD(YEAR, -3, GETDATE()) THEN CUSTOMER_ID END)
试试这个:
SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
FROM PATIENT_ENCOUNTERS
GROUP BY MONTH(ENCOUNTER_DATE)
ORDER BY MONTH(ENCOUNTER_DATE)
在这里 YEAR(GETDATE())
我得到了当年的年份,YEAR(GETDATE())-1
得到了去年的年份部分,依此类推。然后我将今年与 encounter_date 年作为 year(encounter_date) = YEAR(GETDATE())
进行了比较,以获得那年的 customer_id
,它们按月分组。
获取年度累计计数:
SELECT DISTINCT MONTH(ENCOUNTER_DATE) 'MONTH',
COUNT(CASE WHEN year(ENCOUNTER_DATE) = YEAR(GETDATE()) THEN CUSTOMER_ID END) ,
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-1 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-2 THEN CUSTOMER_ID END),
COUNT(CASE WHEN year(ENCOUNTER_DATE)>= YEAR(GETDATE())-3 THEN CUSTOMER_ID END)
FROM PATIENT_ENCOUNTERS
GROUP BY MONTH(ENCOUNTER_DATE)
ORDER BY MONTH(ENCOUNTER_DATE)