#sql #sql-server-2000
#sql #sql-server-2000
Вопрос:
У меня есть следующая таблица
GroupID Sequence Name
1 10 Mary
1 25 Jack
1 17 Jill
2 3 Peter
2 42 Henry
2 50 Paul
Следующий запрос возвращает строку со следующей наименьшей последовательностью (10) для данной группы (1) и заданной последовательностью из 17
SELECT TOP 1 *
FROM dbo.customerassignmentgroup
WHERE groupid = 1
AND SEQUENCE < (SELECT MAX(SEQUENCE)
FROM dbo.customerassignmentgroup i
WHERE i.groupid = customerassignmentgroup .groupid)
AND manualsequence < 17
ORDER BY SEQUENCE DESC
Есть ли другой способ сделать это? Я пытаюсь избежать
ГДЕ i.groupid = customerassignmentgroup .groupid
во внутреннем запросе, потому что мне нужно преобразовать это в запрос на дозвуковом
Примечание: Моей базой данных является SQL Server 2000
Комментарии:
1. можете ли вы использовать хранимую процедуру?
2. Я пытался избежать этого … похоже, я мог бы в конечном итоге использовать его.
Ответ №1:
Если вы используете ORDER BY, как вы делаете, вы могли бы просто сделать:
SELECT TOP 1 *
FROM dbo.customerassignmentgroup
WHERE groupid = 1 AND SEQUENCE < 17
ORDER BY SEQUENCE DESC
Вы могли бы избежать использования сортировки, выполнив:
SELECT *
FROM dbo.customerassignmentgroup t1
WHERE t1.groupid = 1
AND t1.SEQUENCE = (SELECT MAX(t2.SEQUENCE)
FROM dbo.customerassignmentgroup t2
WHERE t2.groupid = 1 AND t2.SEQUENCE < 17)
Ответ №2:
Есть другой способ сделать это, но я понятия не имею, помогает ли это с SubSonic. В основном перемещает подзапрос в FROM
.
SELECT TOP 1 *
FROM dbo.customerassignmentgroup i
INNER JOIN (SELECT MAX(SEQUENCE) SEQUENCE, groupid
FROM dbo.customerassignmentgroup
GROUP BY groupid) maxSeq
ON i.groupid = maxSeq.groupid
and i.SEQUENCE < maxSeq.SEQUENCE
and i.groupid = maxSeq.groupid
WHERE groupid = 1
AND manualsequence < 17
ORDER BY SEQUENCE DESC