【问题标题】:SQL unique data in range范围内的 SQL 唯一数据
【发布时间】:2022-01-26 03:55:54
【问题描述】:

我有一个这样的示例表:

Code Time
A 9:30:06
A 9:30:07
A 10:00:00
B 10:30:00
A 10:45:00
B 10:46:01
B 10:46:00

我想要:

Code Time
A 9:30:06
A 10:00:00
B 10:30:00
A 10:45:00
B 10:46:01

选择的时间并不重要,GROUP BYDISTINCT ON 应该在 1 秒的范围内。

编辑:所有 code 在 1 秒内都被认为是重复的,应该只选择其中的一行。

【问题讨论】:

  • 现在看起来不错!好吧,我真的很困惑。这些表之间的主要区别是什么?目标是什么?现在,确实缺乏信息。
  • 我不明白这个问题。如果 A 已经设置在 9:30:06,为什么 10:00:00 和 A 都在输出中
  • 已编辑问题以解释问题。
  • 在你的 I 代码和 A.Time
  • 如果有 10 行的时间分别为 10:00:01、10:00:02、10:00:03、...、10:00:10,它们相差 1 秒。您只想保留其中的 1 个吗?

标签: sql postgresql


【解决方案1】:

假设您有一个名为 codes 的表,它有两列(codetime),以下查询将产生您正在寻找的确切结果(根据上述表):

WITH dup_codes AS (
  SELECT code, time FROM codes c1
   WHERE EXISTS (SELECT  1 from codes c2
              WHERE c2.code = c1.code
              -- this is where magic happens!
              AND c2.time + interval '1 second' = c1.time
             )
)

SELECT * FROM Codes
WHERE time NOT IN (SELECT time FROM dup_codes);

Db 小提琴:https://dbfiddle.uk/?rdbms=postgres_13&fiddle=c9c4def09b06f04f77d5fa71f29e6c57

【讨论】:

  • 优雅简约
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多