根据先前的值从 table 中删除行

Delete rows from table depending on previous value

我有这样的数据集:

internal_id match_id company_id market_id selection_id odd_value update_date
1 8576748 66 1 1 1.31 2021-01-05 17:59:41
36730 8576748 66 1 1 1.30 2021-01-05 18:58:41
47053 8576748 66 1 1 1.31 2021-01-05 19:59:41
2 8576748 66 1 2 14.00 2021-01-05 17:59:41
36731 8576748 66 1 2 14.00 2021-01-05 18:58:41
47054 8576748 66 1 2 14.00 2021-01-05 19:59:41
3 8576748 66 1 3 3.75 2021-01-05 17:59:41
36732 8576748 66 1 3 3.75 2021-01-05 18:58:41
47055 8576748 66 1 3 3.75 2021-01-05 19:59:41

我需要删除相同 match_id+company_id+market_id+selection_id 的前一个 odd_value 相同的行。在此示例中,包含 internal_id 的行应删除:36731、47054、36732、47055。

如您所见,这不是重复删除,第 1 行和第 47053 行是相同的(对于 match_id+company_id+market_id+selection_id),但是它们应该保持原样,因为 odd_value 1,30(对于 internal_id 36730)与之前的 odd_value 和 odd_value 1,31(对于 internal_id 47053)不同) 与之前的 odd_value.

不同

为了列出这些数据,我使用了这个查询:

SELECT
    `internal_id`,
    `match_id`,
    `company_id`,
    `market_id`,
    `selection_id`,
    `odd_value`,
    `update_date`
    
FROM
    `odds`
WHERE
    `match_id` = 8576748
    AND `company_id` = 66
ORDER BY `match_id`, `company_id`, `market_id`, `selection_id`, `update_date`

以下是区分要删除的行的方法,并以相同的方式编写删除语句:

SELECT *
  ,CASE WHEN LAG(odd_value) OVER (PARTITION BY match_id, company_id , market_id,selection_id ORDER BY update_date) = odd_value THEN 1 ELSE 0 END AS tobeDeleted 
FROM `odds`