删除多行以替换为一行

问题描述 投票:0回答:1

我有一个如下表,其中

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
。我知道如何选择和删除行,但如何一次替换多行?

sql mariadb
1个回答
0
投票

您可以通过 3 个步骤完成此操作:

  1. 通过按日期时间对数据进行分组并检查值的总和来识别所有值条目均为 0 的日期
  2. 删除这些日期对应的行
  3. 为每个识别的日期插入一个新行,其中日期时间设置为识别的日期,位置设置为“EVERYWHERE”,值设置为 0。
-- 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;

© www.soinside.com 2019 - 2024. All rights reserved.