需要按位置的max(id),但始终为每个位置获取相同的值

时间:2016-03-09 22:14:17

标签: sql-server sql-server-2005 sql-server-2008-r2

我在sqlserver中运行查询,我需要按位置的最新ID,位置在不同的表中,但我可以加入id。问题是值始终相同而不是每个位置。这是我的疑问:

SELECT DISTINCT
(select max(id) from t
where p.partname = 'ibiza')locid,
p.partitionkey,
t.partitionkey,
p.partdesc,
p.partname
FROM
t1 t1,
t t
WHERE
t.partitionkey = t1.partitionkey
GROUP BY
t.id,
p.partitionkey,
p.partname,
p.partdesc,

t.partitionkey;

1 个答案:

答案 0 :(得分:2)

除了你的身份问题之外还有一些问题:

  1. 当您已经使用group by时,Distinct是无用的。
  2. 当实际使用" join"时,联接更容易阅读(在我看来)关键字
  3. 没有加入" p" (我认为这就是为什么你把小组混在一起并且截然不同 - 如果没有结构,我无法解决这个问题)
  4. 可以删除t.id组,因为它已经由" max"功能
  5. 然而,实际问题是,您总是选择最后一个ID作为列(对于每一行选择相同的值),这就是它始终相同的原因 - 没有引用实际的行。

    这会更好(至少我猜 - 没有表结构):

    SELECT max(t.id) as locid, p.partitionkey, t.partitionkey, p.partdesc, p.partname 
    FROM t join p
    on t.partitionkey = p.partitionkey
    where p.partname = 'ibiza'
    GROUP BY p.partitionkey, p.partname, p.partdesc, t.partitionkey
    

    修改

    现在我想我明白了,没有t1!它应该是p?

    再次,请使用表名!