partial distinct
Posted Sep.17, 2009 in Общая
предлагаю SQL-задачку. не надуманная, возникла на работе.
контекст: музыкальный сайт, таблица (mysql) с плейлистами юзера
playlists:
{
int id, //автоинкремент
int song_id, //id самой песни
int user_id, //id юзера, который добавил себе песню
datetime added, //время, когда добавлена песня в его плейлист
}
song_id не уникальны, т.к. песню могли добавить несколько юзеров.
задача: написать SQL для выборки: “последние песни, добавленные в плейлисты пользователей”. для песен нужно вывести кто и когда их добавил в последний раз. дубликаты песен выводить не нужно, если песню добавили два юзера – вывести последнее добавление.
иными словами, нужно выбрать “последние N неповторяющихся песен в плейлистах с указанием того, кто последний и когда её добавил”.
то, что пока придумал я, имеет 4 select’а в запросе и 3й уровень вложенности этих select’ов. сможешь лучше?
P.S. конечно же, должно работать максимально быстро. в наличии есть индекс по added.
Tags: mysql, web, задачи, программирование