"with ties" & "over partition" in mysql

student-uni
Дата: 05.02.2013 14:24:47
как оптимальнее переписать этот запрос для MySQL?

SELECT     TOP (1) WITH TIES *
FROM         KURS
ORDER BY ROW_NUMBER() OVER (PARTITION BY product_id
ORDER BY KURSDAT DESC);


спасибо

MySQL 5.1.66-log - Source distribution

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
Akina
Дата: 05.02.2013 14:48:07
Суть запроса - ты бьёшь записи на группы по product_id, нумеруешь по убыванию KURSDAT, после чего берёшь первую запись (у неё гарантированный номер = 1) и все остальные, у которых номер такой же. Т.е. тебе нужно получить для каждого product_id одну запись с максимальным KURSDAT (если таковых несколько - случайную).

Вариант 1: http://www.sql.ru/forum/actualthread.aspx?tid=687908
Вариант 2: получить пару (product_id, MAX(KURSDAT)) в подзапросе и заджойнить его с основной таблицей (правильно сработает только в случае отсутствия дублирования).