我的查询是
SELECT
matno,
MAT_NAME,
MAX(SWITCH(deldate=? ,ORDCASES )) AS [1/1/2014],
MAX(SWITCH(deldate=DateAdd("d", -1, ?),ORDCASES)) AS [previous_day]
FROM invorder
WHERE (invorder.strno =54009) OR ([invorder.deldate] IS NULL)
GROUP BY matno,MAT_NAME;
在这里,我可以在选定日期之前检查一个,但如果它们没有上一个日期的记录,我应该再减少一天的日期并检查直到我找到记录。有人可以帮助我如何递减并找到之前的日期?
答案 0 :(得分:0)
如果不了解具体情况,我会建议采用以下方法:
SELECT MAX(date)
FROM myTable
WHERE date < '2014-01-01' --> Replace this as needed
这会导致上一个日期带有记录。无需每天通过减法检查。
我试图匹配你的情况,试试这个:
SELECT invorder.matno,
invorder.MAT_NAME,
MAX(invorder.date) AS this_record_date,
MAX(previous.date) AS prev_record_date
FROM invorder
JOIN invorder AS previous
ON invorder.matno = previous.matno
AND invorder.strno = previous.strno
AND invorder.date > previous.date
WHERE invorder.strno =54009
GROUP BY invorder.matno,
invorder.MAT_NAME
这会选择date
54009 strno
的最大记录,matno
,MAT_NAME
和date
。此行的扩展时间与matno
和strno
的最大日期相同,不包括我们已选择的日期(因此几乎是第二个最大日期)。