我的任务是创建一个查询,当在一段时间内扫描到两个生产标签时,将通知我们的团队。
我为此使用的表和字段是:
MASTER_LABEL - table是创建标签的顺序。一旦将标签扫描到系统中,就会填充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
STANDARD - Table用于提取周期时间,以计算填充容器的平均时间。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 Time”* .5)进行比较。我只想拉取<(“DISPO_DATE Time”* .5)填充时间的差异
对于一些子查询和group by,这可能吗?
我知道比较"Fill TIME“是以秒为单位会有问题,而DISPO_DATE的差异是以日期时间格式。有什么最好的实践可以解决这个问题?
任何帖子,你可以指导我或内容,将有助于这一点是非常感谢。提前感谢您的帮助。
发布于 2019-06-14 00:26:36
您可以通过乘以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
https://stackoverflow.com/questions/56584792
复制相似问题