【发布时间】:2015-05-13 11:53:33
【问题描述】:
我有三个相关的表,需要根据第三个表中的值(序列号)选择显示两个表中数据的行。我只对序列号的最大值感兴趣。我已经尝试过在 stackoverflow 上建议的多种解决方案,但我仍然无法理解这一点。
此处提供了我的表的示例代码,其中包含所有值的直接 SELECT:http://sqlfiddle.com/#!6/6b8f7/4/0
我的最终目标是获得这样的表格:
reference groupname serialnum
C:123 Group2 3
C:125 Group1 4
C:126 Group1 1
使用 LIMIT 排序似乎不起作用。 有什么想法可以解决这个问题吗?
DDL + DML 用于示例数据:
CREATE TABLE pm_process
([pm_guid] int, [Descr] varchar(4), [usr_newref] varchar(5))
;
INSERT INTO pm_process
([pm_guid], [Descr], [usr_newref])
VALUES
(11111, 'aaaa', 'C:123'),
(22222, 'bbbb', 'C:125'),
(33333, 'cccc', 'C:126')
;
CREATE TABLE tps_group
([tps_title] varchar(6), [tps_guid] int)
;
INSERT INTO tps_group
([tps_title], [tps_guid])
VALUES
('Group1', 99999),
('Group2', 88888)
;
CREATE TABLE pm_process_assignment
([pm_group_guid] int, [pm_process_guid] int, [pm_serial_number] int)
;
INSERT INTO pm_process_assignment
([pm_group_guid], [pm_process_guid], [pm_serial_number])
VALUES
(99999, 11111, 1),
(99999, 11111, 2),
(88888, 11111, 3),
(88888, 22222, 1),
(99999, 22222, 2),
(88888, 22222, 3),
(99999, 22222, 4),
(99999, 33333, 1)
;
【问题讨论】:
-
RIGHT JOIN... 很少有人能理解这些。拯救世界并改用 LEFT JOIN。
-
SQL Server/T-SQL 不使用
limit,而是使用top。 -
@jarlh:这只是角度问题。你可以通过镜子看屏幕,这有帮助:-)
-
@Pawzik:链接到 sql fiddle 非常好,它可以为想要回答您问题的人节省大量时间和精力。但是,您也应该在消息中包含 DDL 和 DML,因为 sql fiddle 会遭受很多停机时间。
-
@ZoharPeled - 注意!
标签: sql sql-server greatest-n-per-group