SQL从同一表中选择两个最大行,并与第三个表联接

亚尼夫

混合的两个表:

项目

| item_id | user_id | data |
----------------------------
| 10       | 100    | A    |
| 11       | 100    | C    |
| 12       | 101    | E    |
| 13       | 101    | G    |

item_detail

| id | item_id | ignore | detail1 | detail2 | detail3 | detail4 |
-----------------------------------------------------------------
| 1  | 10      |   0    |   h1    |   h2    |  h3     |  h4     |
| 2  | 10      |   0    |   g1    |   g2    |  g3     |  g4     |
| 3  | 10      |   1    |   f1    |   f2    |  f3     |  f4     |
| 4  | 11      |   0    |   e1    |   e2    |  e3     |  e4     |
| 5  | 11      |   0    |   d1    |   d2    |  d3     |  d4     |
| 6  | 11      |   1    |   c1    |   c2    |  c3     |  c4     |
| 7  | 12      |   0    |   b1    |   b2    |  b3     |  b4     |
| 8  | 13      |   0    |   a1    |   a2    |  a3     |  a4     |

我需要通过item_id从item_detail的最大ID中找到detail1,detail2,并通过item_id从item_detail的MAX NON IGNORED ID中获得detail3,detail4,并与项目行一起显示。
预期结果:

| item_id | user_id | data | detail1 | detail2 | detail3 | detail4 |
--------------------------------------------------------------------
| 10      | 100     | A    |   f1    | f2      | g3      | g4      |       
| 11      | 100     | C    |   c1    | c2      | d3      | d4      |
| 12      | 101     | E    |   b1    | b2      | b3      | b4      |
| 13      | 101     | G    |   a1    | a2      | a3      | a4      |

这是带有这些数据集的SQLFiddle:http ://sqlfiddle.com/#!2/52839有
任何参与者吗?非常感谢您的投入。
谢谢!

戈登·利诺夫(Gordon Linoff)

最简单的方法将是对使用group_concat()具有substring_index()

select i.item_id, i.user_id, i.data,
       substring_index(group_concat(id.detail order by id.id desc), ',', 1
                      ) as last_detail,
       substring_index(group_concat(case when id.ignored = 0 then id.detail1 end order by id.id desc), ',', 1
                      ) as last_non_ignored_detail1
       substring_index(group_concat(case when id.ignored = 0 then id.detail2 end order by id.id desc), ',', 1
                      ) as last_non_ignored_detail2
       substring_index(group_concat(case when id.ignored = 0 then id.detail3 end order by id.id desc), ',', 1
                      ) as last_non_ignored_detail3
       substring_index(group_concat(case when id.ignored = 0 then id.detail4 end order by id.id desc), ',', 1
                      ) as last_non_ignored_detail4
  from items i join
       item_detail id
       on i.item_id = id.item_id
 group by i.item_id;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL从同一表中选择两个最大行,并与第三个表连接

来自分类Dev

SQL查询以从两个表中选择并与第三个表进行比较

来自分类Dev

SQL查询以从两个表中选择并与第三个表进行比较

来自分类Dev

SQL - 从两个相等的表中选择并显示与第三个值一起连接的两个值

来自分类Dev

左联接两个表到第三个表

来自分类Dev

联接两个表,这些表的键引用第三个表上的相同键,而不使用第三个表

来自分类Dev

从两个SQLFORM.grid中选择记录,然后将记录插入第三个表中

来自分类Dev

通过映射第三个表查询联接两个表,而无需从Oracle中的第三个表返回所有记录

来自分类Dev

Jooq:在三个表的联接中两次联接同一表

来自分类Dev

使用第三个表(SQL)连接两个表

来自分类Dev

SQL查询从多个表中选择并创建第三个表

来自分类Dev

选择具有第一个条件的第三个表 [SQL]

来自分类Dev

如何将两个不同的表联接在一起并合计为第三个表

来自分类Dev

MySql从两个表中多次选择并将它们的结果连接到第三个表

来自分类Dev

使用INNER JOIN将两个表合并为第三个表

来自分类Dev

将两个表中的值插入第三个表中

来自分类Dev

显示两个表的输出,但通过第三个表进行匹配

来自分类Dev

比较两个工作表以创建第三个工作表

来自分类Dev

从其他两个表更新第三个表

来自分类Dev

如何连接两个表并按第三个表排序?

来自分类Dev

连接两个表+第三个表作为条件列

来自分类Dev

如何从两个相关表中获取数据并放入第三个表

来自分类Dev

按第三个表的条件过滤的两个表的分组计数查询

来自分类Dev

如何使用第三个表SQL Server从两个相关的表中检索数据

来自分类Dev

如何使用第三个表SQL Server从两个相关的表中检索数据

来自分类Dev

如何从两个表中获取ID列表并在我的SQL中传递第三个表

来自分类Dev

如何使用第三个表连接没有公用列的两个SQL表,该表包含两个表的列

来自分类Dev

如何通过第三个“映射”表匹配联接中的两列

来自分类Dev

将两个工作表合并成第三个

Related 相关文章

  1. 1

    SQL从同一表中选择两个最大行,并与第三个表连接

  2. 2

    SQL查询以从两个表中选择并与第三个表进行比较

  3. 3

    SQL查询以从两个表中选择并与第三个表进行比较

  4. 4

    SQL - 从两个相等的表中选择并显示与第三个值一起连接的两个值

  5. 5

    左联接两个表到第三个表

  6. 6

    联接两个表,这些表的键引用第三个表上的相同键,而不使用第三个表

  7. 7

    从两个SQLFORM.grid中选择记录,然后将记录插入第三个表中

  8. 8

    通过映射第三个表查询联接两个表,而无需从Oracle中的第三个表返回所有记录

  9. 9

    Jooq:在三个表的联接中两次联接同一表

  10. 10

    使用第三个表(SQL)连接两个表

  11. 11

    SQL查询从多个表中选择并创建第三个表

  12. 12

    选择具有第一个条件的第三个表 [SQL]

  13. 13

    如何将两个不同的表联接在一起并合计为第三个表

  14. 14

    MySql从两个表中多次选择并将它们的结果连接到第三个表

  15. 15

    使用INNER JOIN将两个表合并为第三个表

  16. 16

    将两个表中的值插入第三个表中

  17. 17

    显示两个表的输出,但通过第三个表进行匹配

  18. 18

    比较两个工作表以创建第三个工作表

  19. 19

    从其他两个表更新第三个表

  20. 20

    如何连接两个表并按第三个表排序?

  21. 21

    连接两个表+第三个表作为条件列

  22. 22

    如何从两个相关表中获取数据并放入第三个表

  23. 23

    按第三个表的条件过滤的两个表的分组计数查询

  24. 24

    如何使用第三个表SQL Server从两个相关的表中检索数据

  25. 25

    如何使用第三个表SQL Server从两个相关的表中检索数据

  26. 26

    如何从两个表中获取ID列表并在我的SQL中传递第三个表

  27. 27

    如何使用第三个表连接没有公用列的两个SQL表,该表包含两个表的列

  28. 28

    如何通过第三个“映射”表匹配联接中的两列

  29. 29

    将两个工作表合并成第三个

热门标签

归档