在SQL查询中选择除了最大记录以外的所有记录
我一直试图让这个工作,但我没有得到任何地方。我需要的是以下内容:在SQL查询中选择除了最大记录以外的所有记录
我需要能够为特定表格选择除MAX记录以外的所有记录。我知道如何选择最大记录(通过使用TOP或MAX),但我想显示除此之外的所有内容。有没有办法做到这一点?我已经尝试了下面的代码,但我一直在获取MAX记录。
SELECT
rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName)) as newroom
FROM tenant t (nolock)
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant
and isnull(rm.boccupant,0)=0
and rm.dtmoveout is null
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson
WHERE pn.hmy <>
(SELECT TOP 1 pn.hmy
FROM tenant t (nolock)
INNER JOIN property p (nolock) on p.hMy = t.hProperty
INNER JOIN unit u (nolock) on (t.hUnit = u.hMy
INNER JOIN addr ua (nolock) on u.hmy = ua.hPointer
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant
and isnull(rm.boccupant,0)=0
and rm.dtmoveout is null
and isnull(rm.dtMoveIn,getdate()) >= getdate()
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson
WHERE t.code = '011212'
ORDER BY pn.hmy)
and t.code = '011212'
当我拉出记录后,我想将MAX记录合并到一个单独的行中。
感谢您的任何帮助。
在您的查询:第9行 - 将其更改为:
SELECT MAX(pn.hmy)
和删除线20.没有必要。
谢谢。我将它与Praveen的解决方案配合使用。还有一个问题 - 是否有办法将MAX记录合并到同一个SQL语句中?我的结果如下所示:最大记录,所有其他记录(在一行中)。最多可以有4个符合“所有其他记录”的名称。谢谢 – 2013-03-07 16:32:39
将其标记为有用,以便它可以帮助其他人:) – 2013-03-07 16:37:20
基本上,你想这样:
SELECT * FROM tableA WHERE tableA.ID < (SELECT MAX(ID) FROM tableA)
select
MaxValue = Max(/* whatever*/),
-- other required columns
from
:
:
group by -- as needed
having value <> MaxValue
感谢输入..
我拉近了许多。我的下一个障碍是试图分离剩余的记录。例如,有多个名称链接到该记录。
我想它是:
NewRoom,NewRoom2
鲍勃·史密斯, 乔治·威尔逊
我得到:
NewRoom,NewRoom2
BobSmith
George Wils在
我下面的代码:
SELECT
rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName)) as newroom,
rtrim(ltrim(pn1.sFirstName + ' ' + pn1.uLastName))as newroom2
FROM tenant t (nolock)
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant
and isnull(rm.boccupant,0)=0
and rm.dtmoveout is null
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson
LEFT OUTER JOIN room rm1 (NOLOCK) on t.hmyperson = rm1.hmytenant
and isnull(rm1.boccupant,0)=0
and rm1.dtmoveout is null
LEFT OUTER JOIN person pn1 (nolock) on pn1.hmy = rm1.hmyperson
WHERE (pn.hmy or pn1.hmy) <>
(SELECT Max(pn.hmy)
FROM tenant t (nolock)
INNER JOIN property p (nolock) on p.hMy = t.hProperty
INNER JOIN unit u (nolock) on (t.hUnit = u.hMy
and u.sCode not in ('WAIT' ,'COMAREA')
and u.scode not like 'NONRES%'
and u.exclude = '0')
INNER JOIN addr ua (nolock) on u.hmy = ua.hPointer
INNER JOIN room rm (NOLOCK) on t.hmyperson = rm.hmytenant
and isnull(rm.boccupant,0)=0
and rm.dtmoveout is null
INNER JOIN person pn (nolock) on pn.hmy = rm.hmyperson
WHERE t.scode = 't0029839'
) 和t.scode = 't0029839'
更何况,我需要在同一行的最大记录,以及:
MAX_Room,新房,新房2
谢谢大家
看看http://stackoverflow.com/questions/6751249/correlated-query-select-where-condition-not-maxcondition-in-inner-query – RandomUs1r 2013-03-06 17:09:25
要删除一行,你可以使用'MINUS'或'SUBTRACT',具体取决于sql的味道。 – Glenn 2013-03-06 17:10:03