过去 24 个月的记录 - 按月需要从 SQL Server 获取

问题描述 投票:0回答:1

我有一个员工表,我需要从指定月份获取过去两年中每月的员工总数。

桌子设计

+-----------+-------------+
| Field     | Type        |   
+-----------+-------------+    | 
| emp_name  | varchar(30) | 
| join_date | date        | 
| emp_id    | int(5)      | 
+-----------+-------------+

如果我在下拉列表中选择当前月份(2022 年 12 月),我需要在下面显示输出。

+-----------+-------------+
| Month     | Emp.Count   |   
+-----------+-------------+
| Dec 22    | 10          | 
| Nov 22    | 8           | 
| Oct 22    | 3           | 
| ......    | .           | 
| ......    | .           | 
| ......    | .           | 
| Dec 21    | 5           | 
| Nov 21    | 6           | 
| Oct 21    | 7           | 
| Sept 21   | 7           | 
+-----------+-------------+

我尝试了以下查询,但计数添加了 1 月(2021 年和 2022 年)

SELECT MAX(DATENAME(MM,[join_date])) AS Month, COUNT(1) AS "Total.EMP"
FROM [EMP_TABLE] 
WHERE [join_date] BETWEEN DATEADD(yy, DATEDIFF(yy,0,GETDATE()), 0) AND GETDATE()  
GROUP BY MONTH([join_date]);

我需要形成存储过程(我将传递月份和年份作为参数),并且我在月份列下得到的输出为 1 月、12 月而不是 12 月 22 日,根据月份值和年份,我需要生成过去 24 个月计数结果。

sql sql-server select group-by
1个回答
0
投票

您的原始查询存在两个问题。首先,您的

GROUP BY
条款仅包含月份。其次,你的
DATEADD
中的
WHERE
没有正确使用。这是对您的代码进行最小修改的更正:

更新为根据评论按年份和月份数字排序。

SQL 小提琴

MS SQL Server 2017 架构设置:

CREATE TABLE EMP_TABLE (
  join_date datetime
  );

INSERT INTO EMP_TABLE (join_date)
VALUES 
  ('2022-12-1')
  , ('2022-12-2')
  , ('2022-12-3')
  , ('2022-11-4')
  , ('2022-11-5')
  , ('2021-12-6')
  , ('2021-11-6')
  , ('2021-11-8')
  , ('2021-11-9')
  , ('2021-4-6')
;

查询1

WITH prelim as (
  SELECT 
    YEAR([join_date]) AS Year
    , MONTH([join_date]) AS MONTH
    , COUNT(1) AS "Total.EMP"
  FROM [EMP_TABLE] 
  WHERE [join_date] BETWEEN DATEADD(YEAR, -2, GETDATE()) AND GETDATE()  
  GROUP BY YEAR([join_date]), MONTH([join_date])
)
SELECT 
  [Year]
  , [Month]
  , DATENAME(MM,DATEFROMPARTS([Year],[Month],1)) AS MonthName
  , [Total.EMP]
FROM prelim
ORDER BY [Year] DESC, [Month] DESC

结果:

| Year | Month | MonthName | Total.EMP |
|------|-------|-----------|-----------|
| 2022 |    12 |  December |         3 |
| 2022 |    11 |  November |         2 |
| 2021 |    12 |  December |         1 |
| 2021 |    11 |  November |         3 |
| 2021 |     4 |     April |         1 |
© www.soinside.com 2019 - 2024. All rights reserved.