2015-02-10 94 views
0

內最新的輸入所以我有這個表名爲Mysql的選擇每組

maid_processing 
id  code confirm_arrival category_id arrived 
5  A1  2014-01-02   NULL   1 
4  B2  2014-01-02   NULL   1 
3  A1  2014-01-01   NULL   1 
2  B2  2014-01-01   NULL   1 
1  B2  2014-01-01   NULL   0 

所以你可以看到,代碼重複,但是其他列可能會有所不同。 我想要實現的是,我想

選擇其中confirm_arrival字段滿足日期的給定範圍內的所有代碼和到達= 1,並且由於A1和B2將被重複,因爲兩次的例子滿足條件 然後我們可以將那些相同的代碼分組在一起,因此,形成了2個組,A1和B2

所以我最終想要的是在這兩個組中,我只想要每個組中的輸入行與id號=最大(因此最新)。

The desired result will be 
id code confirm_arrival 
5 A1  2014-01-02 
4 B2  2014-01-02 

我至今只會返回最早(ID =每個組中最小的),請參閱下面

SELECT * 
    FROM 
    (SELECT * 
     FROM maid_processing mp 
     LEFT 
     JOIN 
      (SELECT id catid 
        , archived 
       FROM category 
      ) AS cat 
      ON cat.catid = maid_mp.category_id 
     WHERE arrived = 1 
      AND (archived IS NULL OR archived = 0) 
      AND confirm_arrival BETWEEN :from_date AND :to_date  
     ORDER 
      BY confirm_arrival DESC 
    ) AS inv 
GROUP 
    BY code; 
+0

如果您喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相對應的所需結果集。另外,使歸檔不可爲空並將其設置爲默認值0.哦,並且不需要日期用引號括起來? – Strawberry 2015-02-10 12:19:52

+0

它實際上是在model() - > findAllBySql使用Yii,即時通訊不知道這裏的語法是否重要 – 2015-02-10 13:01:42

+0

可能重複[獲取每組分組SQL結果的最大值記錄](http://stackoverflow.com/questions/12102200/get-records-with-max-value-for-each-group-of-grouped-sql-results)和[爲每組分組的SQL結果獲取最大值的記錄](http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column) – 2015-02-10 13:02:41

回答

0
SELECT * 
    FROM 
    (SELECT * 
     FROM maid_processing mp 
     LEFT 
     JOIN 
     (SELECT id catid 
       , archived 
      FROM category 
     ) AS cat 
     ON cat.catid = mp.category_id 
    WHERE arrived = 1 
     AND (archived IS NULL OR archived = 0) 
     AND confirm_arrival BETWEEN :from_date AND :to_date  
    ORDER 
     BY id DESC 
) AS inv 
GROUP 
BY code; 

的代碼,我剛剛更換了confirm_arrival與ID在第4最後一行。

+0

該解決方案依賴於無證黑客(除非您計算手冊相關頁面的註釋部分)。出於這個原因,我認爲最好堅持記錄的解決方案。 – Strawberry 2015-02-10 14:36:14