2015-02-10 92 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