【问题标题】:Delete rows in database that are outside an subject_id specific date range删除数据库中超出 subject_id 特定日期范围的行
【发布时间】:2021-08-02 23:53:09
【问题描述】:

我有一个关于表格的问题,如下图所示:

[桌子的图片]

对于我的问题,只考虑“subject_id”和“starttime”列就足够了。该表确实有大约 5.000 个唯一的 subject_id。每个 subject_id 可以有多个行,具有不同的开始时间。对于每个subject_id,我想删除每一行,条件如下:

WHERE starttime IS NOT BETWEEN  MIN(starttime) AND date_add(MIN(starttime), INTERVAL 24 HOUR)

其中 MIN(starttime) 是“开始时间”列中的最早日期,分别针对每个 subject_id。

我不知道如何解决这个问题。我认为也许有人可以使用 PARTITION BY 以某种方式解决问题,但我还没有找到一种方法来删除 PARTITION BY 上下文中的行。

【问题讨论】:

  • 请同时标记您的数据库。 “数据库分区”也完全是另一个主题
  • “标记你的数据库”是什么意思?非常感谢

标签: sql database datetime google-bigquery


【解决方案1】:

这是一种方法:

delete from yourtable t1
where t1.starttime > (
        select date_add(MIN(starttime), INTERVAL 24 HOUR)
        from yourtable t2
        where t1.subject_id = t2.subject_id
    )

【讨论】:

  • 这非常有帮助,谢谢!由于我使用 Google Biq Query,因此此代码对我不起作用(我不确定为什么,但它不起作用)。但我用你的代码写了一个对我有用的查询。
  • @mika_d98 这就是为什么你应该在你的问题中标记你的数据库,无论如何你说它不起作用是什么意思?你有错误吗?如果它有帮助,也接受答案谢谢
【解决方案2】:

这对我有用:

SELECT *
FROM ds1
WHERE ds1.starttime <= (
    SELECT date_add(MIN(starttime), INTERVAL 24 HOUR)
    FROM ds1 ds1_temp
    WHERE ds1.subject_id = ds1_temp.subject_id
)

它不会删除行,但会创建一个新表,这对我来说很好。非常感谢!

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2018-11-15
    • 2020-08-16
    • 1970-01-01
    • 2022-12-11
    • 2021-01-10
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多