2014-07-09 26 views
0

我有以下查询。 我只需要选择组内的最旧行(按日期列)。保持我的条件(在哪里和组合)。mysql在一个group by声明中的条件?

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

是一个有点清晰很喜欢FRM通过这首台

+--------------------+-----------+--------------------+-----------+ 
| name    | views  | DATE    | sales | 
+--------------------+-----------+--------------------+-----------+ 
| sue1    |  494 | 2014-06-23 12:08:29| 26  | 
| sue2    |  494 | 2014-06-25 12:08:29| 34  | 
| sue3    |  494 | 2014-06-27 12:08:29| 45  | 
| sue4    |  520 | 2014-06-26 12:08:29| 56  | 
| sue5    |  570 | 2014-06-24 12:08:29| 20  | 
| sue5    |  570 | 2014-06-24 12:08:29| 28  | 
+--------------------+-----------+--------------------+-----------+ 

这第二个

+--------------------+-----------+--------------------+-----------+ 
| name    | views  | DATE    | sales | 
+--------------------+-----------+--------------------+-----------+ 
| sue3    |  494 | 2014-06-27 12:08:29| 45  | 
| sue4    |  520 | 2014-06-26 12:08:29| 56  | 
| sue5    |  570 | 2014-06-24 12:08:29| 28  | 
+--------------------+-----------+--------------------+-----------+ 

marko.c

我试图做一个如此选择

SELECT 
table.* 
from table 
where views > $views AND sales>23 
and date in (select max(date) from table where views > $views AND sales>23) 
group by 
name 

但它不工作。任何人?

+0

它告诉你什么? – evanv

+0

您可以使用ORDER BY DATE DESC LIMIT 1;这将使您的结果只有1行DATE IN降序。请让我知道这对你有没有用。 –

+0

你想要的输出是什么? –

回答

0

您正在选择子查询中的最大总日期,但实际需要的是每个名称的最小(最早)日期。

SELECT 
    t1.* 
from table t1 
join (
    select 
     t2.name, 
     min(t2.date) min_date 
    from table t2 
    where t2.views > $views AND t2.sales > 23 
    group by t2.name 
) t2 on t2.name = t1.name and t2.min_date = t1.date 
where t1.views > $views AND t1.sales > 23 
0

作为第一关我真的不知道你想要什么。我认为你的要求是通过最早的日期获得所有独特的视图......但是无论如何,如果你想要每个东西的最古老的日期,那么只需在订购它之后进行组合。

SELECT * FROM(
    SELECT 
    table.* 
    FROM table 
    WHERE views > $views AND sales>23 
    ORDER BY date 
) AS t 
GROUP BY name; 

当你约会,想想它向后聚集..

MAX(date) will give you the NEWEST date because it is the greatest date. 
MIN(date) will give you the OLDEST date because it is the oldest/smallest date. 

,所以如果你想要做你的其他发布查询,你可以做

SELECT 
table.* 
from table 
where views > $views AND sales>23 
and date in (select MIN(date) from table where views > $views AND sales>23) 
group by 
name 

并查看MIN(日期)是否会诀窍