#sql #sql-server #tsql #sql-order-by
#sql #sql-сервер #tsql #sql-order-by
Вопрос:
У меня проблема с a SELECT
в SQL Server. Мне нужно выбрать верхние 3 записи таблицы, и после этого мне нужно найти записи с условием в этих 3 строках. Я написал это, но результат неверен.
SELECT TOP (3) *
from data
where state='c'
order by time desc
Моя таблица (данные) выглядит следующим образом:
code data state time
A1 12 n 2020/05/08 12:00
A2 13 c 2020/05/08 11:59
A3 10 n 2020/05/08 11:58
A4 7 c 2020/05/08 11:57
A5 18 e 2020/05/08 11:56
A6 14 c 2020/05/08 11:55
Мне нужен такой результат:
A2 13 c 2020/05/08 11:59
но результат моего запроса :
A2 13 c 2020/05/08 11:59
A4 7 c 2020/05/08 11:57
A6 14 c 2020/05/08 11:55
означает, что мне нужно найти записи по state = ‘c’ в верхних 3 строках, А НЕ в верхних 3 записях таблицы, которые содержат state =’c’
Надеюсь, мое объяснение понятно. Что мне делать?
Ответ №1:
Один из методов — это CTE (общее табличное выражение) для 3 верхних строк, а затем внешний запрос для критериев фильтрации:
WITH top3 AS (
SELECT TOP (3) *
FROM data
ORDER BY time DESC
)
SELECT *
FROM top3
WHERE state='c';
Ответ №2:
Попробуйте это:
SELECT *
FROM
(
SELECT *
,ROW_NUMBER() OVER (ORDER BY Time DESC) AS [RowID]
from data
) DS
WHERE [RowID] <=3
AND state = 'c'