2010-05-28 7 views
1

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

DECLARE @biID bigint 
, @dtThreshold  DateTime 

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

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

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

Спасибо, ~ ск

ответ

1

Как насчет:

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 
8

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

SELECT TOP 1 @biID = biID, @dtThreshold = dtDateTime 
    FROM tbPricingCalculationCount WITH (NOLOCK) 
ORDER BY biID DESC; 
1

Как насчет

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

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

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

Если акции более чем один ряд тот же "самый большой" BIID, то вам нужно чтобы ограничить результаты одним использованием ТОП:

SELECT TOP 1 t1.dtDateTime 
FROM tbPricingCalculationCount t1 
LEFT JOIN tbPricingCalculationCount t2 
ON t2.biID > t1.biID 
WHERE t2.biID IS NULL 
+0

вы уверены, что даже работает? вы не можете присоединиться к '<', только '=', или я что-то пропустил? также, что такое предложение NULL WHERE? – oedo

+0

Вы можете присоединиться к любым критериям. Кроме того, в критериях NULL WHERE указано, что вы хотите, чтобы строка, в которой нет бидиса большего размера. –

+0

хорошо я узнаю новую вещь каждый день, то :) – oedo