我的任务是创建一个查询,该查询将在很短的时间内扫描两个生产标签时通知我们的团队。
我为此使用的表和字段是:
MASTER_LABEL-表是为了创建标签的顺序。将标签扫描到系统后,将填充DISPO_DATE。
ID ITEMNO DISPO_DATE STANDARD_ID QTY
-------------------------------------------------
1 ABC (DATE TIME) 12345 4
2 ABC (DATE TIME) 12345 4
3 ABC (DATE TIME) 12345 4
4 EFG (DATE TIME) 45678 20
5 EFG (DATE TIME) 45678 20
6 HIJ (DATE TIME) 91011 14
7 HIJ (DATE TIME) 91011 14
8 ABC (DATE TIME) 12345 4
9 ABC (DATE TIME) 12345 4
标准-表用于提取循环时间以计算填充容器的平均时间。 CYCLETM以秒为单位。
ID CYCLETM(seconds)
----------------------------------
12345 220
45678 105
91011 175
我拥有的基本代码(我知道需要做很大的修改)是
SELECT M.ITEMNO, M.DISPO_DATE, (M.QTY * S.CYCLETM) AS "FILL TIME"
FROM MASTER_LABEL M LEFT OUTER JOIN STANDARD S ON S.ID = M.STANDARD_ID
WHERE M.DISPO_DATE >= SYSDATE - .5
ORDER BY M.ITEMNO, M.DISPO_DATE
最终,我希望找到两个最近的DISPO_DATE时间之间的差异,并将它们与容器的(“ Fill Time” * .5)进行比较。我只想拉出DISPO_DATE时间中的差异<(“ Fill Time” * .5)
某些子查询和分组依据是否可能?
我知道比较“填充时间”(以秒为单位)和DISPO_DATE的差异(以DATE TIME格式)会存在问题。如何解决这一问题的最佳实践是什么?
非常感谢您可以引导我访问的帖子或可以帮助您解决此问题的内容。感谢您的提前帮助。
答案 0 :(得分:1)
您可以通过乘以24 * 60 * 60将两个日期的差值转换为秒。这样您就可以进行比较:
SELECT *
FROM (SELECT M.ITEMNO, M.DISPO_DATE, (M.QTY * S.CYCLETM) AS FILL_TIME,
LAG(M.DISPO_DATE) OVER (PARTITION BY M.ITEMNO ORDER BY M.DISPO_DATE) as PREV_DISPO_DATE
FROM MASTER_LABEL M LEFT OUTER JOIN
STANDARD S
ON S.ID = M.STANDARD_ID
WHERE M.DISPO_DATE >= SYSDATE - 0.5
) MS
WHERE (DISPO_DATE - PREV_DISPO_DATE) * 24 * 60 * 60 > FILL_TIME * 0.5
ORDER BY M.ITEMNO, M.DISPO_DATE