db2 是否根据条件标识其他行的后续行?

s6fujrry  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(125)

我对DB2和SQL比较陌生。有一个客户和他们的访问的表。我需要编写一个查询来查找同一客户在销售= 'Y'的访问之后24小时内的访问。
基于此示例数据:
| 客户ID|访问ID|销售|日期时间|
| - -|- -|- -|- -|
| 一个|一个|Y型|2021年4月23日20时16分00秒00万|
| 2个|2个|不|2021年4月24日20时16分00秒|
| 一个|三个|不|2021年4月23日21时16分00.000000|
| 2个|四个|Y型|2021年4月25日20时16分00秒00万|
| 三个|五个|Y型|2021年4月23日20时16分00秒00万|
| 2个|六个|不|2021年4月25日24时16分|
| 三个|七个|不|2021年5月23日20时16分00秒|
查询结果应返回:
| 访问ID|
| - -|
| 三个|
| 六个|
我该怎么做呢?

fae0ux8s

fae0ux8s1#

请尝试以下操作。您可以取消注解掉的块的注解,以按原样运行此语句。

/*
WITH MYTAB (CustomerId, VisitID, Sale, DateTime) AS
(
VALUES
  (1, 1, 'Y', '2021-04-23 20:16:00'::TIMESTAMP)
, (1, 3, 'N', '2021-04-23 21:16:00'::TIMESTAMP)
, (2, 2, 'N', '2021-04-24 20:16:00'::TIMESTAMP)
, (2, 4, 'Y', '2021-04-25 20:16:00'::TIMESTAMP)
, (2, 6, 'N', '2021-04-25 23:16:00'::TIMESTAMP)
, (3, 5, 'Y', '2021-04-23 20:16:00'::TIMESTAMP)
, (3, 7, 'N', '2021-05-23 20:16:00'::TIMESTAMP)
)

* /

SELECT VisitID
FROM MYTAB A
WHERE EXISTS
(
SELECT 1
FROM MYTAB B
WHERE B.CustomerID = A.CustomerID
AND B.Sale = 'Y'
AND B.VisitID <> A.VisitID
AND A.DateTime BETWEEN B.DateTime AND B.DateTime + 24 HOUR
)

相关问题