2011-08-16 87 views
2

更新:結果各組

可以有IS_ACTIVE = TRUE後IS_ACTIVE =假,所以我需要得到最後分配IS_ACTIVE = TRUE,並得到前IS_ACTIVE =虛假記載

我有一個表具有這種結構

id (not pk but each group is incremental), name, grp, is_active (boolean) 

像這樣的數據組1

1, name1, group1, true 
2, name2, group1, true 
3, name3, group1, false 
4, name1, group1, false 
5, name2, group1, true 
6, name3, group1, false <-- this is the next assigned id as the preceding record has an is_active = true 
7, (names will differt, group the same and all false)... 

點...在同一個表,但是對於第2組

100, name1, group1, true 
101, name2, group1, true 
102, name3, group1, true 
103, name1, group1, true 
104, name2, group1, true 
105, name3, group1, false <-- this is the next assigned id as the preceding record has an is_active = true 
106, (names will differt, group the same and all false)... 

我有這個,但它不工作,我將它喜歡

SELECT grp, COUNT(*) 
FROM tbl_1 
WHERE is_active = false 
AND id > (
    SELECT id 
    FROM tbl_1 
    WHERE is_active = true 
    ORDER BY id DESC 
    LIMIT 1 
) 
GROUP BY grp 

所以我想回報是更多的數據:

group1, 6 
group2, 105 

,但我只得到

group2, 105 
+0

對不起,我已經更新的問題,我會給出一個給予好評所有誰正確地回答了前面的問題 –

回答

3

你只需要真的需要找到第一個id其中is_active = false。沒有必要在id上應用「大於第一活動」條件。

SELECT MIN(id), grp 
    FROM tbl_1 
    WHERE is_active = false 
    GROUP BY grp 

UPDATE:

回答到更新的問題:

SELECT min(id), grp 
    FROM tbl_1 t 
    WHERE is_active = false 
    AND id > (SELECT max(id) 
       FROM tbl_1 
       WHERE is_active = true 
       AND grp = t.grp) 
    GROUP BY grp; 
+0

更新了我的問題,請你再看看嗎? –

+0

因此,基本上你想要第一個'''其中'is_active = false',並且後面沒有'id'具有'is_active = true'? 「尋找一個將返回下一個id的查詢,其中每個組的is_active = false」語句似乎不適合您的更新。 – Vache

+0

是的,謝謝,我已編輯的問題 –

2
SELECT grp, MIN(id) FROM tbl_1 WHERE is_active = false GROUP BY grp;
+0

更新了我的問題,請你再看看嗎? –

2
SELECT 
grp, 
MIN(Id) 
FROM tbl_1 
WHERE is_active = false 
GROUP BY grp 
+0

更新了我的問題,請你再看看嗎? –