我目前正在为一个场景运行此查询,但我有两种情况:如果SYSDATE = Monday,则运行“SYSDATE - 2”,否则运行“SYSDATE - 1”。我通过Excel的OLE连接连接到数据库,所以我不确定我可以使用存储过程。有没有办法编写查询来完成这两个场景?感谢您的帮助。
SELECT
DISTINCT VERSION_NAME VERSION, MIN(RECONCILE_START_DT) DATES
FROM
SDE.GDBM_RECONCILE_HISTORY
WHERE
RECONCILE_RESULT = 'Conflicts'
AND
RECONCILE_START_DT > SYSDATE -1
GROUP BY VERSION_NAME
ORDER BY 2 ASC NULLS LAST
答案 0 :(得分:0)
您可以在WHERE条件中使用CASE语句在星期一减去2或在星期的其余时间减1。 TO_CHAR(DATE,'D')表示从星期日= 1开始的星期几。因此星期一是2。
试试这个:
SELECT
VERSION_NAME AS VERSION,
MIN(RECONCILE_START_DT) AS DATES
FROM
SDE.GDBM_RECONCILE_HISTORY
WHERE
RECONCILE_RESULT = 'Conflicts'
AND
RECONCILE_START_DT > SYSDATE -
CASE TO_CHAR(SYSDATE, 'D')
WHEN '2' THEN 2
ELSE 1 END
GROUP BY VERSION_NAME
ORDER BY 2 ASC NULLS LAST
此外,您不需要DISTINCT关键字,因为您已经使用GROUP BY。