Mysql选择分组

时间:2009-09-15 23:57:58

标签: sql mysql greatest-n-per-group

我需要两个表来从TABLE_ATABLE_B中选择数据;他们有一对多的关系。

在我的select语句中,我经常会从TABLE_A获得多个独特的结果,这很好。但我也会在TABLE_B中获得多个匹配项 - 我需要获取匹配的最新TABLE_B记录。我有一个可自动增加的id标记。

这是一个更详细的例子:

TABLE_A

TABLE_A_id  data
-----------------------------
1           something    
2           somethignelse    
3           yetagainsomething

表-B

TABLE_B_id  TABLE_A_id  data
------------------------------------
1           1           filler_data1
2           1           filler_data1
3           1           filler_data3
4           2           filler_data4
5           2           filler_data5
6           3           filler_data1

我需要选择数据,以便我的返回数组类似于搜索包含“filler_data1”的行:

`TABLE_A_id` = 1, something, `TABLE_B_id` = 2, filler_data1

`TABLE_A_id` = 3, yetagainsomething, `TABLE_B_id` = 6, filler_data1

因此,在上述情况下,我得到最新的TABLE_B数据,即TABLE_B_id = 2,并匹配“filler_data1”的搜索。

2 个答案:

答案 0 :(得分:1)

这是StackOverflow上每周多次出现的“每组最大N查询”问题。

SELECT A.*, B1.*
FROM TABLE_A A
JOIN TABLE_B B1 ON (A.A_ID = B1.A_ID)
LEFT OUTER JOIN TABLE_B B2 ON (A.A_ID = B2.A_ID AND B1.B_ID < B2.B_ID)
WHERE B2.B_ID IS NULL;

答案 1 :(得分:0)

我过去采用的一种方法是创建包含最新信息的table_b视图,然后将table_a连接到该视图。一个很好的例子。我们有一个事故跟踪系统。一个表包含与事件相关的所有常量数据table_a。第二个表table_b充当审计表并跟踪事件的更新。我创建了每个特定事件的最新更新视图,我将此视图用于各种报告,但我可以将此表连接到我的table_a,以产生可生成事件最新信息的结果。