2015-05-29 45 views
0

我有以下设置:如何查询唯一列,根据另一列的值有条件地选择哪一行?

date | event | hits 

Jan | A | 0 
Jan | B | 2 
Jan | C | 0 
Feb | A | 4 
Feb | B | 0 
Feb | C | 0 

而且我在寻找返回的查询:

  • 活动是唯一的(只返回[一月| B | X][二月| B | X],而不是两个)
  • 优先化命中(所以[一月| B | 2]节拍[二月| B | 0]
  • 其次优先考虑最近的日期([Feb | C | 0] beats [Jan | C | 0]

我希望对于上述表查询返回:

Feb | A | 4 
Jan | B | 2 
Feb | C | 0 

回答

1
SELECT 
(select edate from stuff sx where s.event=sx.`Event` ORDER BY sx.hits DESC,sx.edate DESC limit 1) date, 
s.event, (select hits from stuff sx where s.event=sx.`Event` ORDER BY sx.hits DESC,sx.edate DESC limit 1) hits 
FROM stuff s 
GROUP BY Event 
order by event 

表东西EDATE字段被定义为日期。 对于大型表格不是非常有效,但很有效。

相关问题