【问题标题】:Mysql group results found in different rowsmysql分组结果在不同的行中找到
【发布时间】:2021-10-13 03:19:50
【问题描述】:

我有一个自己无法解决的问题。

我在 Mysql 中有下表(某些连接的结果),描述了所有事件

事件表:

ID Odl_ID Evt_ID Evt_Desc Evt_Date Link_1 Link_2 Start_Time End_Time
1 1 0 Start 2021-08-06 10:15:00 Null Null 2021-08-06 10:15:00
2 2 0 Start 2021-08-06 12:15:00 Null Null 2021-08-06 12:18:00
3 1 0 Finish 2021-08-06 14:15:00 Null Null 2021-08-06 10:15:00 2021-08-06 14:15:00
4 1 0 Generate PDF 1 2021-08-06 14:25:00 C:\Path1 Null
5 1 0 Generate PDF 2 2021-08-06 14:25:00 Null C:\Path2
6 2 0 Finish 2021-08-06 14:35:00 Null Null 2021-08-06 10:18:00 2021-08-06 18:15:00
7 2 0 Generate PDF 1 2021-08-06 18:25:00 C:\Path3 Null
8 2 0 Generate PDF 2 2021-08-06 18:25:00 Null C:\Path4

我想创建一个这样的视图,将 Odl_ID 分组并显示在不同行中找到的所有事件(如事件日期、Link_1 等)。

我要达到的结果表:

ID Odl_ID Evt_Date Link_1 Link_2 Start_Time End_Time
1 1 2021-08-06 10:15:00 C:\Path1 C:\Path2 2021-08-06 10:15:00 2021-08-06 14:15:00
2 2 2021-08-06 12:15:00 C:\Path3 C:\Path4 2021-08-06 12:18:00 2021-08-06 18:15:00

我该如何解决这个问题? 我不知道该怎么做,我尝试寻找数据透视表,但我还没有弄清楚问题所在。谢谢

【问题讨论】:

  • event_table 此表错误 - 存在同名列。为它们分配不同的名称。
  • 如果您的数据与“具有相同 Odl_ID 的所有行的 Evt_Date、Start_Time、End_Time 的相同值”和“Link_1 (1) 和 Link_1 (2) 中只有一行包含一组包含一个值”,然后按 Evt_Date、Start_Time、End_Time 和 Odl_ID 分组,并为每个 Link_1 获取 MAX。
  • 编辑第二列名称
  • @alessandro.todisco 根据您的示例数据包含 4 种类型的事件描述,例如开始、完成、gen pdf1、gen pdf2。如果缺少任何一个,那么那些 opl_id 信息将显示或不显示。

标签: mysql group-by pivot resultset


【解决方案1】:

找到一个可行的解决方案,但不知道它是否完全 正确/也许有更好的解决方案

SELECT Odl_Id,
min(Start_time) Start_time,
max(End_time) End_time,
max(Evt_ID) Evt_ID, 
max(Link_1) Link_1,
max(Link_2) Link_2
 FROM view_2
 Group by ODL_Id;

【讨论】:

  • 不应该是MIN(Start_time) Start_timeOdl_ID 而不是ODL
  • @Sam020 你是对的。我调整了表格,但在复制时我忘记了这个
  • 我认为您错过了Group by 中的ODL ;) 我仍然认为它应该是MIN(Start_time) Start_time,因为您想要“最旧”的 start_time 作为最终结果的示例。
  • 谢谢@Sam020,我已经按照建议更新了
猜你喜欢
  • 1970-01-01
  • 2019-10-15
  • 2012-02-23
  • 2019-01-26
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多