【问题标题】:Take only rows with fields MAX date只取字段 MAX date 的行
【发布时间】:2021-01-05 20:11:53
【问题描述】:

我有以下查询:

SELECT cl.[Name] Client, bt.Name BottleType, SUM(csi.Amount) Amount
FROM T_Clients cl
INNER JOIN T_ClientStore cs ON cs.FK_ClientId = cl.ClientID
INNER JOIN T_ClientStoreItem csi ON csi.FK_ClientStoreId = cs.ClientStoreId
INNER JOIN T_BottleType bt ON bt.BottleTypeId = csi.FK_BootleTypeID
GROUP BY cl.[Name], bt.Name
ORDER BY cl.[Name]

T_ClientStore 表中有DueDate 列。我只想获取由cl.[Name] 为 MAX(DueDate) 分组的记录。我在哪里可以定义?补充一点:

WHERE cs.DueDate is MAX

【问题讨论】:

  • 请给出一些示例数据和所有表格列

标签: sql tsql sum inner-join greatest-n-per-group


【解决方案1】:

从您现有的查询开始并根据您的描述,一种直接的方法是将T_ClientStore 上的连接转换为横向连接,从而检索给定客户端的最新记录:

SELECT cl.[Name] Client, bt.Name BottleType, SUM(csi.Amount) Amount
FROM T_Clients cl
CROSS APPLY (
    SELECT TOP(1) *
    FROM T_ClientStore cs 
    WHERE cs.FK_ClientId = cl.ClientID
    ORDER BY cs.DueDate DESC
) cs
INNER JOIN T_ClientStoreItem csi ON csi.FK_ClientStoreId = cs.ClientStoreId
INNER JOIN T_BottleType bt ON bt.BottleTypeId = csi.FK_BootleTypeID
GROUP BY cl.[Name], bt.Name
ORDER BY cl.[Name]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2018-01-25
    • 2020-06-18
    相关资源
    最近更新 更多