我对SQL非常陌生。我正在尝试编写脚本以获取特定项目编号的特定交易类型(处置)的最后一次出现(日期)。

表格如下

ID    ITEMNO    TRANS_DATE  TRANS_TYPE
1     XYZ           12/4/2015   DISPOSITION
2     ABC           12/6/2015   NEW ITEM
3     XYZ           12/14/2015  DISPOSITION


我希望将ITEMNO'XYZ'脚本的结果设置为2015年12月14日。

    select ITEMNO, TRANS_DATE, TRANS_TYPE from TRANSLOG t
    where not exists(select tt.Id
        from TRANSLOG tt
        where tt.TRANS_TYPE=t.TRANS_TYPE and
            tt.Id>t.Id
    )
    AND
    ITEMNO ='XYZ'
    AND
    TRANS_TYPE = 'DISPOSITION'

order by t.TRANS_TYPE


上面的脚本不返回任何结果。

最佳答案

一种方法是获取(ItemNo, 'DISPOSITION', MAX(Trans_Date))列表,然后将其加入完整表。只有最近交易日期的DISPOSITION个项目才能进入结果:

SELECT
  TransLog.ItemNo,
  TransLog.Trans_Date,
  TransLog.Trans_Type
FROM TransLog
JOIN (
  SELECT ItemNo, Trans_Type, MAX(Trans_Date) AS MostRecent
  FROM TransLog
  WHERE ItemNo = 'XYZ' AND Trans_Type = 'DISPOSITION'
  GROUP BY ItemNo, Trans_Type
) MaxDates ON
  TransLog.ItemNo = MaxDates.ItemNo AND
  TransLog.Trans_Type = MaxDates.Trans_Type AND
  TransLog.Trans_Date = MaxDates.MostRecent
WHERE TransLog.Trans_Type = 'DISPOSITION'
ORDER BY TransLog.Trans_Type


如果希望结果包括所有项目的最新DISPOSITION记录,只需从内部查询的ItemNo = 'XYZ'子句中删除WHERE

有一个正在运行的SQLFiddle here-感谢@ JamieD77进行设置:)

关于mysql - 不存在的SQL-多个WHERE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34276416/

10-12 13:44