Sql 当一个月交替时,如何按月分组

Sql 当一个月交替时,如何按月分组,sql,sql-server,Sql,Sql Server,我有一个带有此模板的表: 表1 +----------+------------------+-----+ | Code | DateTime | Qty | +----------+------------------+-----+ | 1 |08/31/2019 18:30 | 100 | | 1 |09/01/2019 18:30 | 150 | | 2 |09/03/2019 18:30 | 80 | |

我有一个带有此模板的表:

表1

+----------+------------------+-----+
| Code     |     DateTime     | Qty |
+----------+------------------+-----+
|        1 |08/31/2019 18:30  | 100 |
|        1 |09/01/2019 18:30  | 150 |
|        2 |09/03/2019 18:30  |  80 |
|        2 |09/03/2019 18:30  | 100 |
|        3 |10/15/2019 18:30  | 100 |
+----------+------------------+-----+
我需要按代码、年、月和数量进行分组

我已经为此表进行了选择:

Select
    Year(DateTime) as Year,
    DATENAME(Month,Datetime) as Month,
    CODE,
    SUM(QTY) as Qty,

From 
    Table_1

Group by 
    Code,
    Year(DateTime),
    DATENAME(Month,Datetime)

Order by Code
但是,当代码在两个不同的月份中有datetime时,该代码有两行:

+----+-----------+-=---+-----+
|Year|   Month   |Code | Qty |
+----+-----------+-----+-----+
|2019| August    |  1  | 100 |
|2019| September |  1  | 150 |
|2019| September |  2  | 180 |
|2019| October   |  3  | 100 |
+----+-----------+-----+-----+
如何按代码进行分组,在这种情况下,行数超过一个月, 考虑到过去一个月,比如:

+----+-----------+-=---+-----+
|Year|   Month   |Code | Qty |
+----+-----------+-----+-----+
|2019| September |  1  | 250 |
|2019| September |  2  | 180 |
|2019| October   |  3  | 100 |
+----+-----------+-----+-----+

希望我是清楚的。

只按代码分组。这里的技巧是显示正确的月份和日期。最简单的方法是通过嵌套查询:

SELECT 
    YEAR(Month) As Year, 
    DATENAME(Month, Month) AS Month, 
    Code, 
    Qty
FROM (
    SELECT
        CODE, 
        MAX([Datetime]) As Month,
        SUM(QTY) as Qty
    FROM
        Table_1    
    GROUP BY 
        Code 
) t    
ORDER BY Code

如果您也只想要该月的数量,这会有点困难,但由于您仍然对所有月份求和,我们仍然可以通过简单的聚合来实现。

您可以尝试下面的脚本-

SELECT YEAR(A.MX_MONTH) Yr,
DATENAME(Month,A.MX_MONTH) Mn,
A.Code Code,
SUM(A.Qty) Qty  
FROM(
    SELECT *,MAX(DateTime) OVER(PARTITION BY Code) MX_MONTH
    FROM your_table
)A
GROUP BY A.Code,YEAR(A.MX_MONTH),DATENAME(Month,A.MX_MONTH)
输出为-

Yr      Mn          Code    Qty
2019    September   1       250
2019    September   2       180
2019    October     3       100

您可以检查

看起来您想使用MAX month,而不是按它分组。但是,当代码在两个不同的月份中有datetime时,该代码有两行,但这是有意义的。9月份代码1的总数是150,而不是250。@SeanLange,但月份不是字母,而是datenamemount,MAXYourdate是@JoelCoehoorn@我意识到这一点。看起来他们想要的是最近一个月。DATENAMEMonth,month AS month>\u<3个月,所有这些都有不同的含义,哈哈。