【问题标题】:SQL Query to return the instance of a column value but return additional fieldsSQL 查询返回列值的实例但返回附加字段
【发布时间】:2015-05-28 10:46:55
【问题描述】:

我的桌子上有各种各样的地段。这些批次通常发生一次,但可以重复。我想获取某个产品代码(列)的每个批次,其中最早创建日期(列)带回与该批次关联的其他字段(到期日期、仓库等)。

到目前为止,我有以下查询:

SELECT DISTINCT lot_number, prod_code, date_received, expiry_date, quantity 
FROM scheme.stquem  
WHERE prod_code = '001'  
AND lot_number != ''     //removes blanks   
ORDER BY lot_number

您如何通过选择最早收到的批次来删除重复项?

【问题讨论】:

  • 如果你想获取prod_code的单个值的数据,那么ORDER BY date_created ASC LIMIT 1

标签: mysql sql select where


【解决方案1】:

使用group by 和join:

SELECT s.lot_number, s.prod_code, s.date_received, s.expiry_date, s.quantity 
FROM scheme.stquem s JOIN
     (SELECT lot_number, min(date_received) as mindr
      FROM scheme.stquem
      WHERE prod_code = '001' AND lot_number <> ''     //removes blanks   
      GROUP BY lot_number
     ) sl
     ON sl.lot_number = s.lot_number and sl.mindr = s.date_received 
WHERE prod_code = '001'
ORDER BY s.lot_number;

【讨论】:

  • 这几乎可以工作,问题是它会带回具有相同接收日期(和批次)但产品代码不同的重复批次。在 order by 之前在产品代码上添加 where 语句后似乎有效。谢谢
【解决方案2】:

仅当没有具有相同 prod_code 但日期更早的其他行时,才使用NOT EXISTS 返回一行:

SELECT lot_number, prod_code, date_received, expiry_date, quantity 
FROM scheme.stquem st1
WHERE prod_code = '001'  
AND lot_number != ''     //removes blanks   
AND NOT EXISTS (select 1 from scheme.stquem st2
                where st1.prod_code = st2.prod_code
                  and st2.date_received < st1.date_received)
ORDER BY lot_number

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2012-04-29
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2017-05-21
    相关资源
    最近更新 更多