SQL DB2 - 嵌入式 SELECT 使用 MAX
SQL DB2 - Embedded SELECT using MAX
我对 SQL 语句有疑问。首先,这是来自我的 DB2 table:
的值
CLT_ID FP_NDT PRD_TCD CLP_DATE_CDTTM FP_SDT CLP_TCD CLP_DATE
------------------------------------------------------------------------------------------------
100085059 2015-06-30 01 2015-11-27-20.14.28.295209 2014-07-01 01 0001-01-01
100085059 2014-06-30 01 2015-11-27-20.14.28.284432 2013-07-01 01 0001-01-01
100085059 2015-06-30 01 2015-11-02-20.04.39.755865 2014-07-01 01 2026-01-30
100085059 2014-06-30 01 2015-10-15-00.00.00.001257 2013-07-01 01 2025-02-20
我的 select 应该 return 最小行 CLP_DATE 具有值 (0001-01-01) 和最近的 CLP_DATE_CDTTM。这是我的 select,但似乎不起作用:
SELECT MIN(CLP_DATE)
FROM TCDECF A
WHERE A.CLT_ID = 100085059
AND A.CLP_DATE >= '2015-10-15'
AND A.CLP_DATE_CDTTM =
(SELECT MAX(B.CLP_DATE_CDTTM)
FROM TCDECF B
WHERE B.CLT_ID = A.CLT_ID
AND B.FP_NDT = A.FP_NDT
AND B.PRD_TCD = A.PRD_TCD)
WITH UR;
此代码没有 return 任何内容。我想这是因为 "AND A.CLP_DATE >= '2015-10-15" 行。有没有办法说 "Select anything >= than this date, but if it returns nothing ,then return 0001-01-01"?
也许这行得通...从 WHERE
子句中删除日期检查,而不是在 SELECT
列表中放入条件 MIN
。使用 COALESCE
到 return 该值,或者如果未找到 0001-01-01
(即 NULL
来自 MIN
)。
SELECT COALESCE(MIN(case when A.CLP_DATE >= '2015-10-15' then A.CLP_DATE end),date'0001-01-01')
FROM TCDECF A
WHERE A.CLT_ID = 100085059
AND A.CLP_DATE_CDTTM =
(SELECT MAX(B.CLP_DATE_CDTTM)
FROM TCDECF B
WHERE B.CLT_ID = A.CLT_ID
AND B.FP_NDT = A.FP_NDT
AND B.PRD_TCD = A.PRD_TCD)
WITH UR;
我对 SQL 语句有疑问。首先,这是来自我的 DB2 table:
的值 CLT_ID FP_NDT PRD_TCD CLP_DATE_CDTTM FP_SDT CLP_TCD CLP_DATE
------------------------------------------------------------------------------------------------
100085059 2015-06-30 01 2015-11-27-20.14.28.295209 2014-07-01 01 0001-01-01
100085059 2014-06-30 01 2015-11-27-20.14.28.284432 2013-07-01 01 0001-01-01
100085059 2015-06-30 01 2015-11-02-20.04.39.755865 2014-07-01 01 2026-01-30
100085059 2014-06-30 01 2015-10-15-00.00.00.001257 2013-07-01 01 2025-02-20
我的 select 应该 return 最小行 CLP_DATE 具有值 (0001-01-01) 和最近的 CLP_DATE_CDTTM。这是我的 select,但似乎不起作用:
SELECT MIN(CLP_DATE)
FROM TCDECF A
WHERE A.CLT_ID = 100085059
AND A.CLP_DATE >= '2015-10-15'
AND A.CLP_DATE_CDTTM =
(SELECT MAX(B.CLP_DATE_CDTTM)
FROM TCDECF B
WHERE B.CLT_ID = A.CLT_ID
AND B.FP_NDT = A.FP_NDT
AND B.PRD_TCD = A.PRD_TCD)
WITH UR;
此代码没有 return 任何内容。我想这是因为 "AND A.CLP_DATE >= '2015-10-15" 行。有没有办法说 "Select anything >= than this date, but if it returns nothing ,then return 0001-01-01"?
也许这行得通...从 WHERE
子句中删除日期检查,而不是在 SELECT
列表中放入条件 MIN
。使用 COALESCE
到 return 该值,或者如果未找到 0001-01-01
(即 NULL
来自 MIN
)。
SELECT COALESCE(MIN(case when A.CLP_DATE >= '2015-10-15' then A.CLP_DATE end),date'0001-01-01')
FROM TCDECF A
WHERE A.CLT_ID = 100085059
AND A.CLP_DATE_CDTTM =
(SELECT MAX(B.CLP_DATE_CDTTM)
FROM TCDECF B
WHERE B.CLT_ID = A.CLT_ID
AND B.FP_NDT = A.FP_NDT
AND B.PRD_TCD = A.PRD_TCD)
WITH UR;