【问题标题】:mysql where condition in a group by statement?mysql where条件在group by语句中?
【发布时间】:2014-08-30 20:58:10
【问题描述】:

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

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

说得更清楚一点,就像传递第一个表一样

+--------------------+-----------+--------------------+-----------+
| 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

但它不起作用。有人吗?

【问题讨论】:

  • 它告诉你什么?
  • 您可以使用 ORDER BY DATE DESC LIMIT 1;这会给你结果只有 1 行 DATE IN 降序。让我知道它是否适合您。
  • 你想要的输出是什么?
  • 您有一个 GROUP BY 子句并且没有聚合函数。只是说'

标签: mysql select group-by where


【解决方案1】:

您在子查询中选择了最大的总体日期,但您真正想要的是每个名称的最小(最旧)日期。

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

【讨论】:

    【解决方案2】:

    作为第一次通过,老实说,我不确定你想要什么。我认为您的要求是按最早日期获取所有唯一视图......但无论如何,如果您想要每件事的最旧日期,那么只需在订购后做您的小组。

    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(date) 是否可以解决问题

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多