我正在寻找,我又有点迷失了。我能找到的最相关的主题是http://www.tek-tips.com/viewthread.cfm?qid=1173569
所以我想要做的是获取一个select语句,如果id和status匹配,则从另一个表中读取最新的日期和时间。
当我这样做时,我遇到了一些问题。我要么超时,因为查询太大,由于存在多个日期和时间而导致重复的ID,或者我有某种语法错误。
程序员创建了两个逻辑文件供我使用,因为我在历史文件中遇到了很多麻烦。第一个逻辑包含状态为' CLO'的历史记录。第二个逻辑包含状态为' LOA'。
的历史记录但是当我尝试使用两个逻辑进行内连接时,在日期和时间使用聚合函数max(),它永远不会完成加载。
如果我尝试仅在子选择中获取前1个ROWS,则语法错误,或者我最终得到一行而不是我尝试内连接的表。
为了澄清,最终的结果是我希望两个单独的列连接到我的主表。 CLO'的最大(日期时间)以及' LOA'的最大值(日期时间)。
WANTED COL1就是当前状态= CLO那么最近的日期时间与CLO ELSE NULL
通缉COL2将始终显示,但它也是最近的日期与LOA
╔════════╦════════════════╦═════════════╦═════════════╗ ║ KEY ID ║ CURRENT STATUS ║ WANTED COL1 ║ WANTED COL2 ║ ╠════════╬════════════════╬═════════════╬═════════════╣ ║ 111 ║ CLO ║ 1/1/2015 ║ 12/31/2014 ║ ║ 112 ║ LOA ║ null ║ 12/31/2014 ║ ║ 113 ║ LOA ║ null ║ 1/1/2015 ║ ╚════════╩════════════════╩═════════════╩═════════════╝
我拥有的历史档案就是这样。
╔════════╦════════════╦══════╦══════════════╗ ║ KEY ID ║ DATE ║ TIME ║ STATUS ║ ╠════════╬════════════╬══════╬══════════════╣ ║ 111 ║ 1/1/2015 ║ 1025 ║ CLO ║ ║ 111 ║ 12/31/2014 ║ 555 ║ LOA ║ ║ 111 ║ 12/31/2014 ║ 333 ║ OTHER STATUS ║ ║ 113 ║ 12/31/2014 ║ 333 ║ LOA ║ ║ 112 ║ 12/31/2014 ║ 333 ║ OTHER STATUS ║ ║ 112 ║ 12/31/2014 ║ 333 ║ LOA ║ ╚════════╩════════════╩══════╩══════════════╝
但为我所做的逻辑却让人感到沮丧。
╔════════╦════════════╦══════╦════════╗ ║ KEY ID ║ DATE ║ TIME ║ STATUS ║ ╠════════╬════════════╬══════╬════════╣ ║ 111 ║ 12/31/2014 ║ 555 ║ LOA ║ ║ 111 ║ 12/30/2014 ║ 555 ║ LOA ║ ║ 111 ║ 12/25/2014 ║ 555 ║ LOA ║ ║ 113 ║ 12/31/2014 ║ 333 ║ LOA ║ ║ 112 ║ 12/31/2014 ║ 333 ║ LOA ║ ╚════════╩════════════╩══════╩════════╝
@ danny117 我尝试了这个查询,但它显示了一个错误。 [SQL0338] JOIN谓词无效。
WITH cteLOA AS
(
SELECT temp_tableLOA.Date || ' ' || temp_tableLOA.Time AS oneDATETIMELOA
FROM /**/ temp_tableLOA
ORDER BY oneDATETIMELOA DESC
FETCH FIRST 1 ROWS ONLY
),
cteCLO AS
(
SELECT temp_tableCLO.Date || ' ' || temp_tableCLO.Time AS oneDATETIMECLO
FROM /**/ temp_tableCLO
ORDER BY oneDATETIMECLO DESC
FETCH FIRST 1 ROWS ONLY
)
SELECT
/*other columns*/
cteLOA.oneDATETIMELOA AS HISTORYDATETIMELOA,
CASE WHEN /**/STAT = 'CLO ' THEN cteCLO.oneDATETIMECLO ELSE NULL END AS HISTORYDATETIMECLO
FROM /**/ vu, cteLOA, cteCLO
/* Insert other inner joins, where logic, group bys, yada yada */
答案 0 :(得分:0)
所有列的一行都是低日期和高日期,加上ID就是这样。
with cte as (
SELECT * FROM mytable where stat = "CLO" ORDER BY xDATE desc
fetch first 1 rows only
) select * from cte
join mytable on cte.id = mytable.id where stat = "OPN" order by
mytable.xdate
fetch first 1 rows only