我得到了一个子表数据如下:
我尝试的查询是:
Id Cust_id Item_Id Inactivated_On Updated_on Ans
-----------------------------------------------------------------------
15 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 true
16 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 123
11 123 541 NULL 2014-05-18 08:44:00 NULL
12 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 NULL
13 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 false
6 123 541 NULL 2014-05-18 08:44:00 NULL
7 123 541 NULL 2014-05-18 08:44:00 NULL
15 123 541 NULL 2014-05-18 08:44:00 false
并且父表如下:
Id Parent_Id Type_Id
-------------------------
15 NULL 1
16 15 2
11 NULL 2
12 11 2
13 11 1
6 NULL 2
7 6 2
现在,我正在尝试基于Updated_on DESC获取仅Inactivated_On Child Id's(16, 12, 13, 7)的首行,因为存在重复的Id。结果还需要检查以下内容:
- 情况1:如果父Id的Type_Id = 2,则Inactivated_On为NULL
- 情况2:当父Id的Type_Id = 1时,Inactivated_On为NULL且给定数据不应具有parent Ans值为'false'
- 情况3:当Child和parent行的Inactivated_On为NULL时,则从最终结果集中排除
我的最终期望结果应为:
Id Cust_id Item_Id Inactivated_On Updated_on Ans
-------------------------------------------------------------------
12 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 NULL
13 123 541 2014-05-18 08:44:00 2014-05-18 08:44:00 false
我尝试的查询是:
SELECT
CH.Id,
CH.Cust_id,
CH.Item_Id,
CH.Inactivated_On,
CH.Updated_on,
CH.Ans,
CH.RN
(SELECT
ROW_NUMBER() OVER (PARTITION BY CT.Item_Id, CT.Id ORDER BY CT.Updated_on DESC) AS RN,
CT.Id,
CT.Cust_id,
CT.Item_Id,
CT.Inactivated_On,
CT.Updated_on,
CT.Ans
FROM
CHILD_TBL AS CT
INNER JOIN
PARENT_TBL AS PT ON PT.Id = CT.Id
WHERE
PT.Parent_Id IS NULL
CT.Inactivated_On IS NOT NULL -- FOR CASE 3 FILTERING
AND CT.Cust_id = 123
AND CT.Item_Id = 541) AS CH
WHERE
CH.RN = 1
我正在寻找一个查询来使Case 1和2正常工作。非常感谢任何帮助。