簡體   English   中英

具有分組條件並具有條件的復雜SQL查詢

[英]Complex SQL query with group by and having in condition

假設我有下面的表測試:

------------------------------
id | active| record
------------------------------
3  | O     | 2015-10-16
3  | O     | 2015-10-15
3  | N     | 2015-10-14
4  | N     | 2015-10-15
4  | O     | 2015-10-14

我想在表的行上進行更新:
-具有多次active ='O'列的ID。
-在這些具有active ='O'多次的行中,更新應將active的值更改為'N',具有max(record)的行除外,它將保持active ='O'。

在我的示例中,具有多次active ='O'列的id是id = 3。

id |active | record
------------------------------
3  | O     | 2015-10-16
3  | O     | 2015-10-15
3  | N     | 2015-10-14

我想要這樣的結果:

id |active | record
------------------------------
3  | O     | 2015-10-16
3  | N     | 2015-10-15
3  | N     | 2015-10-14

我嘗試了此查詢,但出現錯誤:

update test as t1,
(select id
from test
where active = 'O'
group by id
having count(*) > 1) as t2
set t1.actif = 'N'
where t1.record != max(t2.record);

提前致謝!

給定此樣本數據:

CREATE TABLE t
    (`id` int, `active` varchar(1), `record` date)
;

INSERT INTO t
    (`id`, `active`, `record`)
VALUES
    (3, 'O', '2015-10-16'),
    (3, 'O', '2015-10-15'),
    (3, 'N', '2015-10-14'),
    (4, 'N', '2015-10-15'),
    (4, 'O', '2015-10-14')
;

這個查詢

UPDATE 
t
JOIN (
  SELECT 
  id, MAX(record) AS max_record
  FROM 
  t
  WHERE active = 'O'
  GROUP BY id
  HAVING COUNT(*) > 1
) sq ON t.id = sq.id
SET t.active = IF(t.record = sq.max_record, 'O', 'N');

產生以下結果:

+------+--------+------------+
| id   | active | record     |
+------+--------+------------+
|    3 | O      | 2015-10-16 |
|    3 | N      | 2015-10-15 |
|    3 | N      | 2015-10-14 |
|    4 | N      | 2015-10-15 |
|    4 | O      | 2015-10-14 |
+------+--------+------------+

你可以嘗試這樣的事情嗎

select ID, 
count(*) Counted, 
max(record) record 
into #TempTable from Table
where Active = 'O'
group by ID

Update tab
set tab.Active = 'N'
from Table tab
join #tempTable temp on tab.ID = temp.ID
where temp.Counted > 1 and 
tab.record != temp.record

drop table #tempTable

基本上,您只是在將ID和max記錄獲取到臨時表中的同時計數Os,然后執行更新,所以此代碼可能需要進行一些更改,因為我只是一眼就將您指出要執行的方向

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM