Вернуть SQL MAX, с другими данными в таблице - PullRequest
0 голосов
/ 03 апреля 2012

Table1:

ResourceID
Name0 (STRING)
NumberOfLongons0 (INT)
LastLogon0 (DateTIME)

Table2:

ResourceID
NetbiosName0

Я пытаюсь получить следующие данные:

NetbiosName0, Name0, NumberOfLogons0, LastLogon0, где он показывает мне NetbiosName0, независимо от наличия других данных И Name0 / LastLogon0, где NumberOfLogons0 - НАИЛУЧШИЙ для ResourceID

UPDATE:

Протестировал SQL:

SELECT T2.ResourceID, T2.Netbios_Name0, T1.Name0, T1.NumberOfLogons0, t1.LastLogon0 
FROM V_R_System T2 LEFT OUTER JOIN v_GS_NETWORK_LOGIN_PROFILE T1 
ON T2.ResourceID = T1.ResourceID 
WHERE NOT EXISTS 
(SELECT * FROM v_GS_NETWORK_LOGIN_PROFILE 
    WHERE ResourceID = T2.ResourceID AND NumberOfLogons0 > T1.NumberOfLogons0)

и получил следующие результаты:

8435 CLETESTXP-001 NT AUTHORITY\LOCAL SERVICE 
8435 CLETESTXP-001 NT AUTHORITY\NETWORK SERVICE 
8435 CLETESTXP-001 NT AUTHORITY\SYSTEM 
8435 CLETESTXP-001 TESTAGNA\JBradnan 109 3/22/2012 11:37:00 AM

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

Если вам нужен один запрос для нескольких ресурсов в одной команде:

SELECT T2.ResourceID, T2.NetbiosName0, T1.Name0, T1.NumberOfLongons0, t1.LastLogon0
  FROM Table2 T2 LEFT OUTER JOIN Table1 T1 ON T2.ResourceID  = T1.ResourceID
  WHERE NOT EXISTS
    (SELECT * FROM Table1 WHERE ResourceID = T2.ResourceID AND NumbersOfLogons > T1.NumberOfLogons)

Если вам нужен только один ResourceID за раз, вы можете сделать что-то , например , следующее (точный синтаксис зависит от продукта SQL):

SELECT TOP 1 T2.ResourceID, T2.NetbiosName0, T1.Name0, T1.NumberOfLongons0, t1.LastLogon0
  FROM Table2 T2 LEFT OUTER JOIN Table1 T1 ON T2.ResourceID  = T1.ResourceID
  WHERE T2.ResourceID = <<ResourceID>> 
  ORDER BY T2.NumberOfLogOns0 DESC
0 голосов
/ 04 апреля 2012

В SQL Server 2008 или более поздней версии вы можете сделать это:

select
  R.ResourceID,
  R.NetbiosName0,
  L.Name0,
  L.LastLogon0
from Table2 as R
outer apply (
  select top (1) 
  -- add WITH TIES
  -- if the largest NumberOfLogons0 value can occur multiple times
    Name0,
    LastLogon0
  from Table1 as L
  where L.ResourceID = R.ResourceID
  order by NumberOfLogons0 desc
) as L
0 голосов
/ 03 апреля 2012

Я не уверен, что правильно понял вопрос.Но вот мое предположение.

DECLARE @highest int
SET @Highest = (SELECT MAX(NumberOfLogons0) FROM Table1)
SELECT T2.NetbiosName0, T1.Name0, T1.NumberOfLogons0, T1.LastLogon0
FROM Table1 T1 RIGHT JION Table2 T2
ON T1.ResourceID = T2.ResourceID
WHERE T1.NumberOfLogons0 = @Highest

Пожалуйста, оставьте мне комментарий, если это не то, что вы хотите, или есть проблема в моем ответе

...