#sql #select #sql-subselect
#sql #выберите #sql-дополнительный выбор
Вопрос:
Я хочу выбрать номера элементов, которые были недавно изменены на основе метки времени, а затем использовать эти номера элементов для выбора / поиска элементов с bin=MASTER . Ниже то, что я пробовал:
SELECT (SELECT cItemno FROM TB_BinLoc WHERE Updates > {ts '2020-12-17 05:00:00'} ) as x , cBin
FROM TB_BinLoc y
WHERE y.cItemno = x AND cBin = 'MASTER'
===============
Вот что у меня получилось:
SELECT cItemno, cWarehouse, cBin, nCounted, Updates FROM TB_BinLoc WHERE Updates > {ts '2020-12-17 05:00:00'}
UNION
SELECT DISTINCT y.cItemno, y.cWarehouse, y.cBin, y.nCounted, y.Updates
FROM TB_BinLoc y
JOIN TB_BinLoc x on y.cItemno = x.cItemno
Where y.cBin = 'MASTER' AND y.cWarehouse = 'MAIN'
AND x.Updates > {ts '2020-12-17 05:00:00'}
ORDER BY cBin ASC
Ответ №1:
Используйте join
следующим образом:
SELECT distinct x.cItemno as x , y.cBin
FROM TB_BinLoc y
Join TB_BinLoc x on y.cItemno = x.cItemno
Where y.cBin = 'MASTER'
And x.Updates > {ts '2020-12-17 05:00:00'}
Комментарии:
1. Большое вам спасибо!
2. Если это сработало для вас, пожалуйста, примите ответ, чтобы этот вопрос был отмечен как решенный
Ответ №2:
Это может быть хорошим местом для использования оконных функций:
SELECT bl.*
FROM (SELECT bl.*, MAX(updates) OVER (PARTITION BY cItemNo) as max_update
FROM TB_BinLoc bl
) bl
WHERE bl.cItemno = x AND blcBin = 'MASTER' AND
bl.max_update > {ts '2020-12-17 05:00:00'}
Комментарии:
1. @BachPhi . , , я понятия не имею, что вы имеете в виду под этим. Эта логика исходит из запроса в вопросе (тип был
update
, а неupdates
).2. @BachPhi . , , Ваш комментарий не имеет смысла. Я скажу, что оконные функции обычно имеют лучшую производительность, чем самосоединения.
3. @BachPhi . , , Оба эти выражения взяты из вашего вопроса.