2012-09-12 56 views
0

我有一个表,看起来像下面 -GROUP BY多个列

Id  Reference  DateAttribute1 DateAttribute2 
    1  MMM005   2011-09-11  2012-09-10 
    2  MMM005   2012-06-13  2012-09-10 
    3  MMM006   2012-08-22  2012-09-10 
    4  MMM006   2012-08-22  2012-09-11 

我有手柄的ID值。我想查询这样,我得到以下结果

Id  Reference  DateAttribute1 DateAttribute2 
    2  MMM005   2012-06-13  2012-09-10 
    4  MMM006   2012-08-22  2012-09-11 

我想我的结果通过引用进行分组,然后“DateAttribute1”,然后“DateAttribute2”这样 - DateAttribute1拥有DateAttribute2优先为你在结果中可以看到上面的内容。
我应该如何编写我的查询以上述方式获取结果?

任何解决方案?

+1

“DateAttribute1优先于DateAttribute2”Colud you plz explain? –

+0

基本上,在上面的情况下,如果有两个引用具有相同的引用号,那么syem应该查看dateattribute1以查看哪个日期更长,如果它们相同,则应该查看dateattribute2以检查哪个是更大,然后最后返回相应的行。 – Tams

+0

检查我的查询..应该工作 –

回答

1
select max(id),Reference, min(DateAttribute1),max(DateAttribute2) 
group by Reference 
+0

我不认为这会产生我期待的结果。 – Tams

+0

做了一个小编辑 – MichaelT

+0

这里我们假设max(id),我不能假设在实际场景中。我错过了什么。基本上我想查询,它返回与id的正确的行。 – Tams

0

试试这个:

select * 
from your_table t 
join (
     select Reference, 
      min(DateAttribute1) as DateAttribute1, 
      max(DateAttribute2) as DateAttribute2 
     from your_table 
     group by Reference 
    )a 
on t.Reference=a.Reference 
and t.DateAttribute1=a.DateAttribute1 
and t.DateAttribute2=a.DateAttribute2   
+0

仍然没有得到正确的结果与上述代码..非常感谢您的答复反正...我错过了什么? – Tams

1
Try it..... 

SELECT * FROM通过参考

(SELECT * FROM凭身份证递减your_table顺序)为x组
0

假设表名是'tbl2'

select * from (select * from tbl2 order by REFERENCE,DateAttribute1 desc, 
DateAttribute2 desc) as abc group by reference