Я хочу получить 2 самые дорогие книги и наименее 2 дорогие книги по цене используя FIRST_Value и LAST_Value SQL Server
Наличие нулей дает неверное значение минимальной цены, я хочу, чтобы минимальная цена игнорировала нули
Select top 2 FIRST_VALUE(price) Over(Order by price) as MinPrice,
FIRST_VALUE(title) Over (order by price) as MinName,
LAST_VALUE(price) Over (order by price desc) as MaxPrice,
LAST_VALUE(title) over (Order by price desc) as MaxName
from titles;
Получение этого вывода
MINPrice MINName Maxprice MaxName
NULL The Psychology of Computer $22.95 But is it Friendly?
NULL The Psychology of Computer $21.59 Computer Phobic and
Где результат, который я ожидаю, должен быть
Minprice MinName Maxprice Maxname
$2.99 The Gourmet Microwave $22.95 But is it Friendly?
$2.99 You can Combat stress $21.59 Computer Phobic and
Итак, как мне исключить NULL из минимальной цены
SELECT min(value) FROM table WHERE value IS NOT NULL.
Это должно быть что-то вроде этого.
Вы можете попробовать с
;WITH ctemin AS
(
SELECT TOP 2 price AS minprice, title AS mintitle FROM titles WHERE price IS NOT NULL ORDER BY price
),
ctemax AS
(
SELECT TOP 2 price AS maxprice, title AS maxtitle FROM titles WHERE price IS NOT NULL ORDER BY price DESC
)
SELECT ctemin.minprice,ctemin.mintitle,ctemax.maxprice,ctemax.maxtitle FROM ctemax
INNER JOIN ctemin ON 1=1
Возможный дубликат Last_value с IGNORE NULLS в SQL Server