我有一个如下表,其中
datetime
和 location
一起构成主索引。
日期时间 | 地点 | 价值 |
---|---|---|
日期1 | loc1 | 0 |
日期1 | loc2 | 0 |
日期1 | loc3 | 0 |
日期1 | ... | 0 |
日期1 | loc999 | 0 |
日期2 | loc1 | 0.01 |
日期2 | loc2 | 0.02 |
日期2 | loc3 | 0 |
日期2 | ... | 0 |
日期2 | loc999 | 0 |
在某些情况下,特定
datetime
的所有值都是 0
(上例中的 date1
)。在本例中,我想删除所有此类行并将它们替换为单行。在新行中,datetime
-> date1
、location
-> EVERYWHERE
和 value
-> 0
。我知道如何选择和删除行,但如何一次替换多行?
您可以通过 3 个步骤完成此操作:
-- Step 1: Identify dates where all values are 0 (assuming your table is named 'your_table')
SELECT datetime
FROM your_table
GROUP BY datetime
HAVING SUM(value) = 0;
-- Step 2: Delete rows for these dates
DELETE FROM your_table
WHERE datetime IN (
SELECT datetime
FROM your_table
GROUP BY datetime
HAVING SUM(value) = 0
);
-- Step 3: Insert the new row for each identified date
INSERT INTO your_table (datetime, location, value)
SELECT datetime, 'EVERYWHERE', 0
FROM your_table
WHERE datetime IN (
SELECT datetime
FROM your_table
GROUP BY datetime
HAVING SUM(value) = 0
)
GROUP BY datetime;