gpt4 book ai didi

sql - 在这种情况下选择不同的 orderID 的快速方法是什么?

转载 作者:行者123 更新时间:2023-12-05 01:11:54 24 4
gpt4 key购买 nike

假设我在 SQL Server 中有一些 orderID。每个orderID可能有多个timestamps,可以为null。找到不同的 orderID 的快速方法是什么

  • 都有非空的时间戳
  • 最后一个时间戳是在昨天

示例:

今天是2018-02-08,数据如下,结果应该是OrderID 11。

OrderID     | Timestamp
------------+-------------------------
11 | 2018-02-07 10:08:52.740
11 | 2018-02-06 10:08:52.740
22 | 2018-02-03 10:08:52.740
22 | 2018-02-04 10:08:52.740
33 | 2018-02-07 10:08:52.740
33 | NULL

PS:这张表大概有十亿条记录。而每个orderID有大约3~4个时间戳。

最佳答案

虽然直接的解决方案是使用 GROUP BY/HAVING/MIN/MAX,但在处理十亿行时需要使用 WHERE:

  1. 查找时间戳比今天新的行 - 1
  2. 将它们分组并找到最大小于今天的行(这确保最近的行是昨天而不是今天)
  3. 对于生成的订单 ID,检查其 COUNT all = COUNT not null 时间戳
WITH cte AS (
SELECT OrderID
FROM testdata
WHERE Timestamp >= CAST(CURRENT_TIMESTAMP - 1 AS DATE)
GROUP BY OrderID
HAVING MAX(Timestamp) < CAST(CURRENT_TIMESTAMP AS DATE)
)
SELECT testdata.OrderID
FROM cte
INNER JOIN testdata ON cte.OrderID = testdata.OrderID
GROUP BY testdata.OrderID
HAVING COUNT(*) = COUNT(Timestamp)

关于sql - 在这种情况下选择不同的 orderID 的快速方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com