SQL Server 最近24个月的记录-按月需要从SQL服务器中提取

ryoqjall  于 2023-01-01  发布在  其他
关注(0)|答案(1)|浏览(109)

我有一个雇员表,我需要从指定的月份获取过去两年中基于月度的雇员总数。
表格设计

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

如果我在下拉菜单中选择当前月份(dec 2022),我需要显示下面的输出。

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

我尝试了以下查询,但计数与Jan月份相加(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]);

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

wxclj1h5

wxclj1h51#

原始查询的问题有两个方面。首先,GROUP BY子句只包含月份。其次,WHERE中的DATEADD使用不正确。以下是对代码的最小修改更正:

CREATE TABLE EMP_TABLE (
  join_date datetime
  );

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

SELECT 
  DATENAME(MM,[join_date]) AS Month
  , YEAR([join_date]) AS Year
  , COUNT(1) AS "Total.EMP"
FROM [EMP_TABLE] 
WHERE [join_date] BETWEEN DATEADD(YEAR, -2, GETDATE()) AND GETDATE()  
GROUP BY YEAR([join_date]), DATENAME(MM,[join_date]);

| 月份|年份|Total.EMP|
| - ------| - ------| - ------|
| 十二月份|小行星2021|第二章|
| 十二月份|小行星2022|三个|
| 十一月|小行星2021|第二章|
| 十一月|小行星2022|第二章|
fiddle

相关问题