SQL 查询 return 列值的实例但 return 附加字段
SQL Query to return the instance of a column value but return additional fields
我在 table 中有多个地段。这些批次通常出现一次,但可以重复。我想获取具有最早创建日期(列)的特定产品代码(列)的每个批次,带回与该批次相关的其他字段(到期日、仓库等)。
到目前为止,我有以下查询:
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
如何通过选择最早收到日期的批次来删除重复项?
使用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;
仅当没有其他具有相同 prod_code 但更早日期的行时,才将 NOT EXISTS
用于 return 行:
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
我在 table 中有多个地段。这些批次通常出现一次,但可以重复。我想获取具有最早创建日期(列)的特定产品代码(列)的每个批次,带回与该批次相关的其他字段(到期日、仓库等)。
到目前为止,我有以下查询:
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
如何通过选择最早收到日期的批次来删除重复项?
使用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;
仅当没有其他具有相同 prod_code 但更早日期的行时,才将 NOT EXISTS
用于 return 行:
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