我是这个领域的新手,我已经为一个问题挣扎了几天了,这让我发疯了。简而言之:我正在寻找连续几天下订单的用户。举例来说:20230715、20230715、20230716、20230717、20230717、20230718。
不应包括未连续购买的用户,例如:20230715、20230715、20230719。
你能帮我写一个SQL Oracle代码吗?非常感谢您的光临。我也试着为这个主题找到任何解决方案,但到目前为止我还没有找到任何东西。
这是我众多尝试中的一个。除此之外,我还尝试使用了lag()和lead()函数,但效果有限。
我想提取连续天数的客户订单。另外,我想在单行/用户中管理匹配的示例,因为稍后,我想计算这些天/用户的支出
WITH ranked_data AS (
SELECT
"USER",
"COMPANY",
"CREATIONDATE",
ROW_NUMBER() OVER (PARTITION BY "USER", "COMPANY" ORDER BY "CREATIONDATE") AS rn
FROM
P_TEST_P
)
SELECT
"USER",
"COMPANY",
LISTAGG("CREATIONDATE", ', ') WITHIN GROUP (ORDER BY "CREATIONDATE") AS "CONSECUTIVE_DATES"
FROM
ranked_data
GROUP BY
"USER",
"COMPANY";
字符串
输入示例:
USER;Company;creationdate
Liza;Amigurumi KFT;20230712
Liza;Amigurumi KFT;20230713
Liza;Amigurumi KFT;20230714
Liza;Amigurumi KFT;20230715
Liza;Amigurumi KFT;20230728
Liza;Amigurumi KFT;20230718
Liza;Amigurumi KFT;20230722
Liza;Amigurumi KFT;20230723
Liza;Amigurumi KFT;20230724
Liza;Amigurumi KFT;20230729
Liza;Amigurumi KFT;20230729
Liza;Amigurumi KFT;20230729
Liza;Bubu btk;20230703
Liza;Bubu btk;20230703
Liza;Bubu btk;20230708
Liza;Bubu btk;20230711
Liza;Bubu btk;20230722
Liza;PGGNG;20230728
Liza;PGGNG;20230728
Liza;PGGNG;20230728
Liza;PGGNG;20230730
Patrik;YNWA;20230701
Patrik;YNWA;20230706
Patrik;YNWA;20230708
Patrik;YNWA;20230709
Patrik;HUNF;20230725
Patrik;HUNF;20230729
Laszlo;FOUR GRG;20230712
Laszlo;FOUR GRG;20230713
Laszlo;FOUR GRG;20230713
Laszlo;FOUR GRG;20230714
型
2条答案
按热度按时间twh00eeo1#
字符串
如果您改变主意并希望考虑公司,只需将其添加到PARTITION BY子句中。
gg58donl2#
| 公司名称|连续日期| CONSECUTIVE_DATES |
| --|--| ------------ |
| Amigurumi KFT| 2023年7月12日、2023年7月13日、2023年7月14日、2023年7月22日、2023年7月23日、2023年7月28日| 12-JUL-23, 13-JUL-23, 14-JUL-23, 22-JUL-23, 23-JUL-23, 28-JUL-23 |
| 四格|2023年7月12日,2023年7月13日| 12-JUL-23, 13-JUL-23 |
| YNWA| 2023年7月8日| 08-JUL-23 |
fiddle