【问题标题】:SELECT MAX DATE FROM MULTIPLE DATES从多个日期中选择最大日期
【发布时间】:2016-10-13 13:47:33
【问题描述】:

这是我的情况:

我有 2 张桌子 SKUDisco_Dates

在两个表中都有一个相似的字段。

SKU.[MFG_PART_NUMBER] = Disco_Dates.[MATERIAL]

我需要知道每个 MFG_PART_NUMBER 可用的最大 DATE_UPDATE

DISCO_DATE TABLE

+-------------+-----------------------+-----------------------+
| MATERIAL    |DISCO_DATE             | DATE_UPDATE           | 
+-------------+-----------------------+-----------------------+
|T6C25AW#ABC  |NULL                   |2016-09-14 11:15:03.587|
|T6C25AW#ABC  |2016-10-28 00:00:00.000|2016-09-21 13:45:03.591| 
|T6C25AW#ABC  |2016-10-31 00:00:00.000|2016-09-30 12:38:08.990| 
+-------------+-----------------------+-----------------------+

SKU TABLE

+---------------+
|MFG_PART_NUMBER| 
+---------------+
|T6C25AW#ABC    |
|G2F32UC#ABC    |
+---------------+

SQL查询

SELECT
 t1.[MFG_PART_NUMBER]
,t2.[DISCO_DATE]
,MAX (t2.[DATE_UPDATE]) as DATE_UPDATE

FROM Test.dbo.SKU t1

LEFT JOIN Test.dbo.Tbl_Disco_Dates t2
ON [MFG_PART_NUMBER] = [MATERIAL]

WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC'

group by 
  t1.[MFG_PART_NUMBER]
 ,t2.[DISCO_DATE]

我当前的结果是全部 3 行。

这是我需要的。

+----------------+-----------------------+-----------------------+
|MFG_PART_NUMBER |DISCO_DATE             | DATE_UPDATE           |  
+----------------+-----------------------+-----------------------+
|T6C25AW#ABC     |2016-10-31 00:00:00.000|2016-09-30 12:38:08.990| 
+----------------+-----------------------+-----------------------+

提前致谢。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    试试这个:

    SELECT
     t1.[MFG_PART_NUMBER]
    ,t2.[DISCO_DATE]
    ,t2.[DATE_UPDATE] as DATE_UPDATE
    
    FROM Test.dbo.SKU t1
    
    LEFT JOIN Test.dbo.Tbl_Disco_Dates t2
    ON [MFG_PART_NUMBER] = [MATERIAL]
    
    WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC'
          AND t2.[DATE_UPDATE] = (SELECT MAX(t2.[DATE_UPDATE] FROM Test.dbo.Tbl_Disco_Dates t2)
    

    【讨论】:

    • 非常接近预期的结果。但这让我找到了答案 SELECT t1.[MFG_PART_NUMBER] ,t2.[DISCO_DATE] ,t2.[DATE_UPDATE] as DATE_UPDATE FROM Test.dbo.SKU t1 LEFT JOIN Test.dbo.Tbl_Disco_Dates t2 ON [MFG_PART_NUMBER] = [MATERIAL ] WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC' AND t2.[DATE_UPDATE] = (SELECT MAX(t2.[DATE_UPDATE]) FROM Test.dbo.Tbl_Disco_Dates t2) group by t1.[MFG_PART_NUMBER] ,t2.[DISCO_DATE ] ,t2.[DATE_UPDATE]
    • 哦,是的,我忘了 MAX 必须在 SELECT 语句中
    • 这样操作还需要group by吗?
    • @Kris 好提示,不需要分组。
    【解决方案2】:
     declare @maxdate datetime
     select @maxdate = max(t2.[DATE_UPDATE]) FROM Test.dbo.SKU
     select * from ( SELECT
      t1.[MFG_PART_NUMBER]
     ,t2.[DISCO_DATE]
      , DATE_UPDATE
    
      FROM Test.dbo.SKU  where DATE_UPDATE=   @maxdate)   t1 
      LEFT JOIN Test.dbo.Tbl_Disco_Dates t2
       ON t1.[MFG_PART_NUMBER] = t2.[MATERIAL]
    
      WHERE t1.[MFG_PART_NUMBER] = 'T6C25AW#ABC'
    
      group by 
     t1.[MFG_PART_NUMBER]
     ,t2.[DISCO_DATE]
    

    【讨论】:

      【解决方案3】:

      一个简单的GROUP BY 查询不起作用:

      SELECT MATERIAL,
             MAX(DISCO_DATE) AS DISCO_DATE,
             MAX(DATE_UPDATE) AS DATE_UPDATE
      FROM Test.dbo.Tbl_Disco_Dates
      GROUP BY MATERIAL
      

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 2014-01-24
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多