根据先前的值从 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`
我有这样的数据集:
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`