Size: a a a

2020 April 24

E

Eugene in ru_mysql
Александр
скорее всего даже не в разы
надо протестить
источник

GK

Grigori Kochanov in ru_mysql
это вопрос не порядка, тут алгоритмичская сложность не меняется
источник

GK

Grigori Kochanov in ru_mysql
вырастет таблица еще в 2 раза - и все-равно упадет
источник

А

Александр in ru_mysql
я написал вот такое алгоритмически верное решение, но странно что mysql так не умеет я всегда думал что умеет и у него даже есть оптимизация с DISTINCT + LIMIT
WITH d AS (
 SELECT 1 id, 'comment10' comment, 1 item_id
 UNION ALL SELECT 2, 'comment1', 1 val
 UNION ALL SELECT 3, 'comment3', 2 val
 UNION ALL SELECT 4, 'comment4', 2 val
)
, item_ids AS (
 SELECT DISTINCT item_id
 FROM d
 ORDER BY id DESC
 LIMIT 20
)
, t AS (
 SELECT id, comment, item_id
 , ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY id DESC) rn
 FROM d
 WHERE item_id IN (SELECT item_id FROM item_ids)
)
SELECT id, comment, item_id
FROM t
WHERE rn = 1
источник

E

Eugene in ru_mysql
умеет в 8 версии вроде. ваше решение больше для mssql
источник

А

Александр in ru_mysql
ругается на
ORDER BY clause is not in SELECT list, references column 'd.id' which is not in SELECT list; this is incompatible with DISTINCT
источник

GK

Grigori Kochanov in ru_mysql
Александр
я написал вот такое алгоритмически верное решение, но странно что mysql так не умеет я всегда думал что умеет и у него даже есть оптимизация с DISTINCT + LIMIT
WITH d AS (
 SELECT 1 id, 'comment10' comment, 1 item_id
 UNION ALL SELECT 2, 'comment1', 1 val
 UNION ALL SELECT 3, 'comment3', 2 val
 UNION ALL SELECT 4, 'comment4', 2 val
)
, item_ids AS (
 SELECT DISTINCT item_id
 FROM d
 ORDER BY id DESC
 LIMIT 20
)
, t AS (
 SELECT id, comment, item_id
 , ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY id DESC) rn
 FROM d
 WHERE item_id IN (SELECT item_id FROM item_ids)
)
SELECT id, comment, item_id
FROM t
WHERE rn = 1
даже и так, с CTE проблемы всегда, и то, что это оконная функция - не позволит остановить исполнение запроса когда набрали 20 id-шников
источник

А

Александр in ru_mysql
у меня стоит 8.0.19 вроде последняя
источник

А

Александр in ru_mysql
Grigori Kochanov
даже и так, с CTE проблемы всегда, и то, что это оконная функция - не позволит остановить исполнение запроса когда набрали 20 id-шников
не не, тут оконная уже не причём, в этом алгоритме всё идеально
источник

GK

Grigori Kochanov in ru_mysql
так-то да, но мы говорим про mysql
источник

А

Александр in ru_mysql
пха, изи
WITH d AS (
 SELECT 1 id, 'comment10' comment, 1 item_id
 UNION ALL SELECT 2, 'comment1', 1 val
 UNION ALL SELECT 3, 'comment3', 2 val
 UNION ALL SELECT 4, 'comment4', 2 val
)
, item_ids AS (
 SELECT DISTINCT id + NULL id, item_id
 FROM d
 ORDER BY id DESC
 LIMIT 20
)
, t AS (
 SELECT id, comment, item_id
 , ROW_NUMBER() OVER (PARTITION BY item_id ORDER BY id DESC) rn
 FROM d
 WHERE item_id IN (SELECT item_id FROM item_ids)
)
SELECT id, comment, item_id
FROM t
WHERE rn = 1
источник

А

Александр in ru_mysql
этот запрос не будет деградировать с увеличением кол-ва строк
источник

GK

Grigori Kochanov in ru_mysql
Александр
этот запрос не будет деградировать с увеличением кол-ва строк
а ну, мне лень проверять :) если уже умеет - ради бога
источник

E

Eugene in ru_mysql
а в date что-то кроме первых чисел есть?
источник

A

Alex in ru_mysql
Eugene
а в date что-то кроме первых чисел есть?
блин, и правда нету, спасибо)
источник

А

Александр in ru_mysql
Alexey
SELECT MAX(id) as id, item_id FROM comments WHERE stat=1 GROUP BY item_id ORDER BY id DESC LIMIT 20
Алексей, проверь мой запрос на реальных данных, хочу убедиться что всё летать будет
источник

A

Alexey in ru_mysql
Александр
Алексей, проверь мой запрос на реальных данных, хочу убедиться что всё летать будет
Неизвестный оператор. (near "WITH" at position 0)
источник

A

Alexey in ru_mysql
источник

A

Alexey in ru_mysql
кажется он не понимает WITH
источник

E

Eugene in ru_mysql
потому что версия не 8
источник