mysql选择where = max(date)和group by

时间:2014-07-08 18:06:01

标签: mysql group-by greatest-n-per-group

我有以下查询。 我只需要选择最旧的行(按DATE列)。保持我的条件(在哪里和分组)

SELECT 
table.*
from database.table
where views = $views AND sales>23
group by 
name

更清楚一点就像传递frm这第一张桌子

+--------------------+-----------+--------------------+
| USER               | id        | DATE               |
+--------------------+-----------+--------------------+
| sue1               |       494 | 2014-06-23 12:08:29|
| sue2               |       494 | 2014-06-25 12:08:29|
| sue3               |       494 | 2014-06-27 12:08:29|
| sue4               |       520 | 2014-06-26 12:08:29|
| sue5               |       570 | 2014-06-24 12:08:29|
+--------------------+-----------+--------------------+

到第二个

+--------------------+-----------+--------------------+
| USER               | id        | DATE               |
+--------------------+-----------+--------------------+
| sue3               |       494 | 2014-06-27 12:08:29|
| sue4               |       520 | 2014-06-26 12:08:29|
| sue5               |       570 | 2014-06-24 12:08:29|
+--------------------+-----------+--------------------+

marko.c

3 个答案:

答案 0 :(得分:1)

您可以使用以下子选择方式。

SELECT 
t1.* 
from database.table t1
where t1.views = $views AND t1.sales>23
and t1.date in (select min(date) from table where id = t1.id group by id)
group by 
t1.name  ;

答案 1 :(得分:0)

Use subselect
SELECT * FROM (SELECT table.*....) WHERE `DATE` ... ORDER BY `DATE` LIMIT ...
or having
SELECT table.* ... GROUP BY name HAVING `DATE` ...

答案 2 :(得分:0)

不是肯定的,这就是你所追求的,你的团队似乎很奇怪。也许简单地通过扩展滥用mySQL组可能会导致问题的一部分......作为一个规则,任何加重的事都应该有一个组,否则......为什么你需要一个组? (我在这里看不到聚合......)

SELECT 
table.*
from database.table DT1
where Dt1.views = $views AND Dt1.sales>23
and dt1.date = (Select min(date) from database.table DT2 where user=Dt1.user)
group by name