2010-05-28 5 views
1

J'ai une question rapide. Comment sélectionner les deux valeurs dont j'ai besoin dans une requête? Actuellement, je fais cela, ce qui fonctionne bien, mais il est évident que deux requêtes sont lancées quand on devrait faire l'affaire. J'ai essayé MAX (columnA) et GROUP BY ColumnB, mais cela renvoie plusieurs lignes. Je veux seulement une rangée retournée.Groupe SQL Max par requête Aide

DECLARE @biID bigint 
, @dtThreshold  DateTime 

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

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

Je voudrais que ces deux variables soient définies correctement dans une requête. Comment puis je faire ça?

Merci, ~ ck

Répondre

1

Que diriez-vous:

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 

Si vous n'êtes pas en utilisant le BIId ailleurs, vous pouvez même couper à:

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

pouvez-vous pas faire exactement cela?

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

Que diriez-vous

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

Ce retour dtDateTime pour la ligne avec le plus grand BIId:

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

Si plusieurs actions rang même "le plus grand" BIId, alors vous avez besoin pour limiter les résultats à un en utilisant TOP:

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

Etes-vous sûr fonctionne même? vous ne pouvez pas rejoindre un '<', seulement un '=', ou est-ce que j'ai manqué quelque chose? aussi, quelle est la clause NULL WHERE? – oedo

+0

Vous pouvez rejoindre tous les critères. En outre, le critère NULL WHERE indique que vous voulez la ligne où il n'y a pas de plus grand biID. –

+0

Eh bien, j'apprends une nouvelle chose tous les jours alors :) – oedo