首页 > 解决方案 > 在oracle sql developer中编写查询以检索设备数量,90K+记录表的最有效方法是什么

问题描述

例如:

我需要从表“history_log”中收集具有 15 个或更多“9000”“event_code”记录的设备“device_id”的数量;15 条或更多“9001”“event_code”记录;3 个或更多 '9002' "event_code" 记录;6 月份(从 6 月 1 日到 6 月 30 日)分别有 5 个或更多 '9003' "event_code" 记录

我无法结合 WHERE 和 HAVING 子句并不断遇到语法错误。提前致谢。

标签: sqloracle

解决方案


我需要从表“history_log”中收集设备“device_id”的数量:

  • 15 条或更多 '9000' "event_code" 记录;
  • 15 条或更多“9001”“event_code”记录;
  • 3 个或更多 '9002' "event_code" 记录;和
  • 分别有 5 个或更多 '9003' "event_code" 记录,

6 月份(6 月 1 日至 6 月 30 日)

您希望在日期范围内并在子句中GROUP BY device_id使用条件聚合来计算个人,以确保满足您的必要金额。找到匹配的值后,您就可以全部找到它们:HAVINGevent_codedevice_idCOUNT

SELECT COUNT(device_id)
FROM   (
  SELECT device_id
  FROM   history_log
  WHERE  datetime >= DATE '2021-06-01'
  AND    datetime <  DATE '2021-07-01'
  GROUP BY device_id
  HAVING COUNT(CASE event_code WHEN 9000 THEN 1 END) >= 15
  AND    COUNT(CASE event_code WHEN 9001 THEN 1 END) >= 15 
  AND    COUNT(CASE event_code WHEN 9002 THEN 1 END) >=  3
  AND    COUNT(CASE event_code WHEN 9003 THEN 1 END) >=  5
)

推荐阅读