以下是我的疑问:
SELECT *
FROM a
INNER JOIN b ON b.id_a = a.id
INNER JOIN c ON c.id_b = b.id
INNER JOIN d ON d.id_c = c.id
INNER JOIN e ON e.id = d.id_e我的问题是,它返回一些行,除了'c‘表值之外,这些行非常相同。我需要取“c”中一列的最大值,但我不知道具体情况如何。
此查询返回的内容示例:
a.fields b.fields c.id c.gamut c.position d.fields e.fields
--------------------------------------------------------------------------
... ... 1 2 1 ... ...
... ... 2 2 2 ... ...
... ... 3 2 3 ... ...
... ... 4 3 1 ... ...
... ... 4 3 2 ... ...我想要的是:
a.fields b.fields c.id c.gamut c.position d.fields e.fields
--------------------------------------------------------------------------
... ... 3 2 3 ... ...
... ... 4 3 2 ... ...我需要得到相同范围的最大位置。
信息:
发布于 2017-04-13 09:36:07
这是ROW_NUMBER()函数的一个简单应用程序:
;WITH Ordered AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY c.gamut ORDER BY c.position desc) as rn
FROM a
INNER JOIN b ON b.id_a = a.id
INNER JOIN c ON c.id_b = b.id
INNER JOIN d ON d.id_c = c.id
INNER JOIN e ON e.id = d.id_e
)
select * from Ordered where rn = 1(如果同一gamut有多行具有相同的最大gamut,则将选择任意行。如果有更多的断带列,请将它们添加到ORDER BY中。如果你想让领带出现,切换到RANK()而不是ROW_NUMBER())
发布于 2017-04-13 09:36:17
嗨,请试一试,让我知道它是否工作,如果不是,请提供给我的模式和表的数据。
SELECT a.fields,b.fields,max(c.id),c.gamut,max(c.position),d.fields,e.fields
FROM a
INNER JOIN b ON b.id_a = a.id
INNER JOIN c ON c.id_b = b.id
INNER JOIN d ON d.id_c = c.id
INNER JOIN e ON e.id = d.id_e
group by a.fields,b.fields,c.gamut,d.fields,e.fieldshttps://stackoverflow.com/questions/43388316
复制相似问题