enter image description here 你好,
我需要从3个表中读取数据,然后我必须将这些记录处理到目标系统。我编写了如下所示的选择查询以获取数据。
表A具有类似A1,A2,A3,A4,A5的字段
表B具有类似B1,B2,B3的字段
表C具有类似C1,C2,C3的字段
除功能用于从选择查询结果中消除一些记录。
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
Except
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
and tableA.A3='Y'
现在此查询可以正常工作,并返回如下所示的1000条记录。
(或请检查附件/下面的链接,以确保输出图像对齐正确)
Output data for above query -Image-Attachment
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
| A1 (order) | A2(Sequence) | A3(orderDate) | A4 | A5 | B1 | B2 | B3 | C1 | C2 | C3 |
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
| 1111 | 1 | 1/1/2019 | wqe | 3e | 1111 | qq | 1/1/2019 | 1111 | 1 | 1/1/2019 |
| 1111 | 2 | 1/1/2019 | qe | 4r | 1111 | aa | 1/1/2019 | 1111 | 2 | 1/1/2019 |
| 1111 | 3 | 1/1/2019 | qwe | | 1111 | ss | 1/1/2019 | 1111 | 3 | 1/1/2019 |
| 2222 | 1 | 1/1/2019 | | tg | 2222 | cc | 1/1/2019 | 2222 | 1 | 1/1/2019 |
| 3333 | 1 | 1/1/2019 | eqw | | 3333 | vv | 1/1/2019 | 3333 | 1 | 1/1/2019 |
| 3333 | 2 | 1/1/2019 | qweq | 5y | 3333 | bb | 1/1/2019 | 3333 | 2 | 1/1/2019 |
| 3333 | 3 | 1/1/2019 | | 5u | 3333 | nn | 1/1/2019 | 3333 | 3 | 1/1/2019 |
| 3333 | 4 | 1/1/2019 | qwe | | 3333 | mm | 1/1/2019 | 3333 | 4 | 1/1/2019 |
| 4444 | 6 | 1/1/2019 | | 4g | 4444 | mn | 1/1/2019 | 4444 | 6 | 1/1/2019 |
| 9999 | 7 | 1/1/2019 | wqw | 8m | 9999 | yu | 1/1/2019 | 9999 | 7 | 1/1/2019 |
+------------+--------------+---------------+----------+------+------+------+----------+------+------+----------+
但是我想修改选择查询以一次获取一个订单的所有记录。这样我就可以处理这些记录并更改这些记录的状态。然后,下次运行查询时,它将为下一个订单“ 2222”获取记录,依此类推。
因此,从上面的示例中:如果我运行选择查询,则只需要获取订单1111的记录(前3条记录)。
谢谢。
答案 0 :(得分:0)
您可以使用OLAP specifications中的RANK
功能。
WITH A AS
(
-- Your original query
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
Except
select A1,A2,A3,A4,A5,B1,B2,B3,C1,C2,C3
from tableA
left outer join tableB
on (tableA.A1=tableB.B1) and (tableA.A2=tableB.B2)
left outer join tableC
on (tableA.A1=tableC.C1)
where ORDERDATE='01/01/2019'
and tableA.A3='Y'
-- End of your original query
)
SELECT *
FROM
(
SELECT A.*, RANK() OVER (ORDER BY A1) RK_
FROM A
)
WHERE RK_=1;
您的查询当然不能返回已处理的订单。