Справка по группам SQL Max по запросу - PullRequest
1 голос
/ 29 мая 2010

У меня быстрый вопрос. Как выбрать два нужных мне значения в одном запросе? В настоящее время я делаю это, и это прекрасно работает, но, очевидно, он запускает два запроса, когда нужно делать свое дело. Я пробовал MAX (columnA) и GROUP BY ColumnB, но это возвращает несколько строк. Я хочу вернуть только одну строку.

DECLARE @biID  bigint  
, @dtThreshold      DateTime 

  SELECT @biID = MAX(biID)
FROM tbPricingCalculationCount WITH (NOLOCK)

  SELECT @dtThreshold = dtDateTime
FROM tbPricingCalculationCount WITH (NOLOCK)
WHERE biID = @biID

Я бы хотел, чтобы обе эти переменные были правильно установлены в одном запросе. Как я могу это сделать?

Спасибо, ~ Ск

Ответы [ 4 ]

8 голосов
/ 29 мая 2010

Разве вы не можете просто сделать это?

SELECT TOP 1 @biID = biID, @dtThreshold = dtDateTime 
  FROM tbPricingCalculationCount WITH (NOLOCK) 
ORDER BY biID DESC;
1 голос
/ 29 мая 2010

Как насчет:

DECLARE
  @biID bigint,
  @dtThreshold DateTime 

SELECT
  @dtThreshold = A.dtDateTime,
  @biID = B.biID
FROM tbPricingCalculationCount A
  INNER JOIN (SELECT MAX(biID) biID
              FROM tbPricingCalculationCount) B
    ON A.biID = B.biID

Если вы не используете biID в другом месте, вы можете даже обрезать его до:

DECLARE
  @dtThreshold DateTime 

SELECT
  @dtThreshold = A.dtDateTime
FROM tbPricingCalculationCount A
  INNER JOIN (SELECT MAX(biID) biID
              FROM tbPricingCalculationCount) B
    ON A.biID = B.biID
1 голос
/ 29 мая 2010

Возвращает dtDateTime для строки с наибольшим biID:

SELECT t1.dtDateTime
FROM tbPricingCalculationCount t1
LEFT JOIN tbPricingCalculationCount t2
ON t2.biID > t1.biID
WHERE t2.biID IS NULL

Если более одной строки используют один и тот же «самый большой» biID, вам нужно ограничить результаты одним, используя TOP:

SELECT TOP 1 t1.dtDateTime
FROM tbPricingCalculationCount t1
LEFT JOIN tbPricingCalculationCount t2
ON t2.biID > t1.biID
WHERE t2.biID IS NULL
1 голос
/ 29 мая 2010

Как насчет

SELECT TOP 1 @biID = biID, @dtThreshold = dtDateTime
FROM tbPricingCalculationCount (NOLOCK)
ORDER BY biID desc
...