在我的界面中,我有两个过滤器:
Date - Today , Yesterday, WTD , MTD
Shift - 1st, 2nd, 3rd
班次时间如下:
1st: 06:00 - 14:00
2nd: 14:00 - 22:00
3rd: 22:00 - 06:00
我通过以下查询计算每种材料的生产质量:
SELECT
C.MATERIAL
,G.MACHINE
,F.PART
,SUM(A.QT_CONFIRMED) QT_CONFIRMED
FROM
CONFIRMATION A
INNER JOIN LOT_RECORD B ON A.LOT_RECORD_ID=B.LOT_RECORD_ID
INNER JOIN LOT C ON B.LOT_RECORD_ID=C.LOT_RECORD_ID
INNER JOIN MATERIAL D ON C.MATERIAL = D.MATERIAL
INNER JOIN PART F ON C.PART=F.PART
INNER JOIN MACHINE G ON F.MACHINE=G.MACHINE
WHERE
A.DT_CONFIRMATION BETWEEN '[Param.1]' AND '[Param.2]'
GROUP BY
C.MATERIAL
,G.MACHINE
,F.PART
ORDER BY
G.MACHINE ASC
今天/昨天,我可以获取日期和班次,并可以将相关参数传递给查询并获得正确的输出。
如果我选择昨天然后选择第二班,那么
Param.1 = 2015-12-14T14:00:00
Param.2 = 2015-12-14T22:00:00
但我面临的问题是WTD和MTD。如果我选择MTD和第一班,那么
我的开始日期是12月1日。结束日期将是12月15日。 现在我无法通过
Param.1 = 2015-12-01T06:00:00
Param.2 = 2015-12-15T14:00:00
因为它会计算所有班次的数量。我需要传递参数,使其仅在12月1日至12月15日的06:00至14:00之间计算数量。
Also, for 3rd shift the time will be 10 PM of the start date and 6 AM of startdtae + 1.
我怎样才能实现这一目标?我真的很困惑和困惑。
由于
答案 0 :(得分:1)
使用SQL中的DATEPART()
函数添加另一个条件,检查DT_CONFIRMATION
列的小时是否在您要过滤的班次的小时内。
因此,如果您只搜索Shift 1
,则需要添加:
AND DATEPART(hour, DT_CONFIRMATION) BETWEEN 6 AND 14
到你的WHERE
条款。您显然需要使用基于Shift的小时参数化WHERE子句,这与您对日期的操作相同。