在 SQL 查询中查找最大日期数

Finding Max of dates in SQL Query

提问人:user3900603 提问时间:12/13/2022 最后编辑:Jodrelluser3900603 更新时间:12/13/2022 访问量:55

问:

C类型 材料 多德 PLNT公司 SOrg 已售至 ShipTo(发货地址) 客户 供应商 SerProv的 POrg NSapRel CRCY公司 更改 时间 更改者 SAP日期 SAPime SAPUser
PB00型 775515 100 加语 7500000678 PO04型 2022 100 中国科学院 9,299.36 或! 15.02.2022 13:55:16 用户 1 15.02.2022 13:56:15 用户 1
PB00型 775515 100 加语 7500000678 PO04型 2022 100 中国科学院 5,907.42 或! 28.01.2022 18:45:45 02.02.2022 12:32:18 SAPPO_DEP_AZ

我为上表编写了一个查询,以获取这两行的最大日期,不幸的是,它每次都返回为“28.01.2022”。

这是我的查询。

SELECT
       CType,
       Material,
       CoCd,
       Plnt,
       [Customer],
       SOrg,
       [Vendor],
       max_date = MAX(ChangedOn) OVER (
          PARTITION BY
              CType,
              Material,
              CoCd,
              Plnt,
              [Customer],
              SOrg,
              [Vendor]) 
FROM
      Calc
WHERE
          CType='PB00'
      AND
          Material='775515'
      AND
          Plnt='GA'

预期输出:MAxDate 列为“15.02.2022”

Varchar(500)中的所有列,所以我也尝试了以下查询,

SELECT
       CType,
       Material,
       CoCd,
       Plnt,
       [Customer],
       SOrg,
       [Vendor],
       MAX(cast(ltrim(rtrim(ChangedOn)) as date)) AS max_date
FROM
       Calc
WHERE
          CType='PB00'
   AND
          Material='775515'
   AND
          Plnt='GA'
GROUP BY
          CType,
          Material,
          CoCd,
          Plnt,
          [Customer],
          SOrg,
          [Vendor]

显示错误“从字符串转换日期和/或时间时转换失败”。

这里有什么问题吗?

sql sql-server sql-server-2008-r2

评论

0赞 Alex 12/13/2022
你们的专栏是什么类型?ChangedOn
0赞 user3900603 12/13/2022
一切都是 varchar(500)
0赞 Tyron78 12/13/2022
首先,请提供可消费的示例数据,而不是屏幕截图。关于您的查询:您使用窗口函数而不是常规分组依据有什么原因吗?以下示例: 但是,您必须将 ChangedOn 转换为日期才能正常工作。SELECT CType,Material, CoCd, Plnt, [Customer], SOrg, [Vendor], MAX(ChangedOn) AS max_date FROM Calc WHERE CType='PB00' AND Material='775515' AND Plnt='GA' GROUP BY CType,Material, CoCd, Plnt, [Customer], SOrg, [Vendor]
4赞 Alex 12/13/2022
“一切都是 varchar(500) ” - 这将是你的答案。 不是日期,因此“28.01”大于“15.02”VARCHAR
1赞 Jodrell 12/13/2022
我花时间编辑了你的问题,想象你想让问题易于阅读,从而回答。

答:

2赞 ahmed 12/13/2022 #1

您可以使用 or 函数将 varchar date 转换为 max 函数中的 date 数据类型,但最好将日期值存储为日期以避免此类问题。CONVERTTRY_CONVERT

请尝试以下操作:

SELECT CType,Material, CoCd, Plnt,  [Customer], SOrg, [Vendor],
       max_date = MAX(TRY_CONVERT(DATE, ChangedOn, 104)) OVER 
       (PARTITION BY CType,Material, CoCd, Plnt, [Customer], SOrg, [Vendor])    
FROM Calc where CType='PB00' and Material='775515' and Plnt='GA'

观看演示