【发布时间】:2011-02-16 06:45:41
【问题描述】:
我有两张桌子:
table_1
uid | xid | name
table_2
uid | elements | time | pkey
我想选择多行 xid、元素和时间,其中时间是 10 个最小值并且 uid(或 xid)是不同的。
table_1中的uid,xid是唯一的,table_1和table_2中的uid是一对多的关系..
我尝试了类似的方法,但效果不太好:
SELECT table_1.xid, MIN(table_2.time), table_2.elements
FROM table_1, table_2
WHERE table_1.uid= table_2.uid
GROUP BY table_2.uid
LIMIT 10
让我们拿一些数据来玩:
table_1
uid | xid | name
1 | 435 | John
2 | 596 | Jane
table_2
uid | elements | time | pkey
1 | 1 | 567 | 0
2 | 2 | 335 | 1
1 | 1 | 435 | 2
1 | 2 | 456 | 3
2 | 1 | 337 | 4
1 | 1 | 428 | 5
如何为每个 UID 选择前 2 个不同的结果? 在这种情况下:
fid| elements | time
596| 2 | 335
435| 1 | 428
谢谢!!!
如果人们不明白为什么 lexu 的解决方案不起作用 - 它没有绑定到表 2 上的主键
如果我将上述数据更改为:
table_2
uid | elements | time | pkey
1 | 1 | 567 | 0
2 | 2 | 335 | 1
1 | 1 | 435 | 2
1 | 2 | 456 | 3
2 | 1 | 337 | 4
1 | 2 | 428 | 5
保持 table_1 相同,那么结果应该是:
fid| elements | time
596| 2 | 335
435| 2 | 428
但是@lexu的解决结果是:
fid| elements | time
596| 2 | 335
435| 1 | 428
不过,感谢大家的帮助,尤其是@eagle!
【问题讨论】:
-
你没有忘记什么吗?这些表之间有什么联系? xid -> uid? JOIN + GROUP BY 不适合你吗?
-
uid -> uid..我会在上面解释更多..
-
在 XID 上做你的小组 .. 然后它应该可以工作
-
整个 table_2 中最小的 10 个或每个 uid 最小的 10 个或 table_2 中时间最短的 10 个 uid? :) 你必须精确地使用 SQL,然后它会变得容易得多:)
-
table_2 中不同 uid 的 10 个最小时间..