【问题标题】:MySQL : Combinging Aggregate function with Date Time function in a joinMySQL:在连接中结合聚合函数和日期时间函数
【发布时间】:2016-02-08 21:09:39
【问题描述】:

假设我有两张桌子,一张用于探测器,一张用于每个探测器进行的外星人遭遇..

 PROBE
 id           probe_launch_date
 --------     -----------------
 1            12/03/2214
 2            02/06/2215
 3            07/09/2215

ENCOUNTER
id              encounter_species  encounter_date     probe_id
 -----------     ----------------   --------------     --------
 1                Klingons           01/06/2215         1
 2                Romulans           09/15/2215         2
 3                Vulcans            11/15/2215         2

我想查看每个探测器自发射之日起与外星人相遇的次数,并且我希望数据按探测器发射后的一周分组。因此,例如对于探针 2,结果集可能看起来像

  week  encounter
  ----  --------
  31     1
  40     1

这是我第一次破解 SQL..

 SELECT WEEK(a.probe_launch_date) as launch_week, b.COUNT(*) 
  as num_of_encounters FROM probe a, encounter b  
  where a.id = b.probe_id and a.id = 2 GROUP BY  WEEK(a.probe_launch_date)

这当然没用。如何修复或重写它?

【问题讨论】:

  • week()是mysql函数遇到id = 1会返回1。
  • b.COUNT( * ) 不好 ==> COUNT(b.* )

标签: mysql datetime join group-by


【解决方案1】:

编辑基于 cmets 中的反馈:

驾驶桌应该是您的encounter 桌,因为那是您感兴趣的星期。

使用DATEDIFF函数计算发射日期和遭遇日期之间的天数,然后除以7和ROUND得到周数。

SELECT ROUND(DATEDIFF(e.encounter_date, p.probe_launch_date) / 7, 0) AS week, 
        COUNT(*) AS number_of_encounters
    FROM encounter e
        INNER JOIN probe p
            ON e.probe_id = p.probe_id
    WHERE e.probe_id = 2
    GROUP BY ROUND(DATEDIFF(e.encounter_date, p.probe_launch_date) / 7, 0);

【讨论】:

  • 谢谢乔,但我真的需要按发布后的周数对数据进行分组,这可能吗?让结果集看起来像我的示例?
  • @AbuMariam 我根据您的反馈编辑了我的答案。
猜你喜欢
  • 2021-08-19
  • 2021-11-07
  • 2019-12-21
  • 1970-01-01
  • 2018-06-29
  • 2022-01-15
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多