2

我目前正在针对一种情况运行此查询,但我有两种情况:如果 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
4

1 回答 1

1

您可以在 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。

于 2014-03-06T18:43:04.810 回答