Попробуйте.
DECLARE @table AS TABLE (query NVARCHAR(MAX)
,update_date DATE
,website_id INT
,device NVARCHAR(MAX)
,page NVARCHAR(MAX)
,impressions INT
,clicks INT
,POSITION INT
)
INSERT INTO @table
VALUES ('kitchen', '2018-05-01', 2, 'desktop', 'http...', 11000, 50, 3),
('table ', '2018-05-01', 2, 'desktop', 'http...', 7000, 40, 3),
('kitchen', '2018-05-02', 2, 'desktop', 'http...', 11500, 55, 3),
('table ', '2018-05-02', 2, 'desktop', 'http...', 7100, 35, 3);
WITH cte
AS (SELECT *
, ROW_NUMBER() OVER (PARTITION BY query ORDER BY clicks DESC) RN
FROM @table
)
SELECT cte.query
, cte.update_date
, cte.website_id
, cte.device
, cte.page
, cte.impressions
, cte.clicks
, cte.POSITION
FROM cte
WHERE RN = 1
Должно быть достаточно близко.
Будет отображаться только одна строка для запроса, и вы можете изменить порядок, чтобы решить, какой строке следует присвоить приоритет при необходимости.
Добавление дополнительных полей в раздел позволит вам группировать по другим параметрам. например группировка по запросу в месяц и т. д.