select * from
(
SELECT r1.Компания, r1.Дата, (select count(*) from комдата as rr where rr.Компания = r1.Компания and rr.Дата >= r1.Дата) AS xx
FROM комдата AS r1
ORDER BY r1.Компания, r1.Дата DESC
)
where xx <=3;
Помогите с SQL-запросом
есть таблица сделок: столбцы компания и дата
надо получить таблицу, выбрав последние 3 сделки для каждой компании
как это делается SQL-запросом, подскажите пжлста, и делается ли вообще?
работаю с бд Access
Код:
Мда... под Oracle такие вещи решаются проще...
Цитата:
TOP - Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Следующая инструкция SQL позволяет получить список 25 лучших студентов выпуска 1994 года:
SELECT TOP 25
Имя, Фамилия
FROM Студенты
WHERE ГодВыпуска = 1994
ORDER BY СреднийБалл DESC;
Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы «Студенты», удовлетворяющих предложению WHERE.
Предикат TOP не осуществляет выбор между равными значениями. Если в предыдущем примере средние баллы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей.
SELECT TOP 25
Имя, Фамилия
FROM Студенты
WHERE ГодВыпуска = 1994
ORDER BY СреднийБалл DESC;
Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы «Студенты», удовлетворяющих предложению WHERE.
Предикат TOP не осуществляет выбор между равными значениями. Если в предыдущем примере средние баллы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей.
Как выбрать для одной компании последние 3 сделки - легко и просто. А вот как выбрать для ВСЕХ - тут надо думать...
А нельзя просто в самой программе сделать цикл по всем компаниям?
Plisteron спасибо большое
Код:
//Запрос1
SELECT * FROM Запрос2
WHERE where xx <=3
//Запрос2
SELECT r1.Компания, r1.Дата, (select count(*) from комдата as rr where rr.Компания = r1.Компания and rr.Дата >= r1.Дата) AS xx
FROM комдата AS r1
ORDER BY r1.Компания, r1.Дата DESC
SELECT * FROM Запрос2
WHERE where xx <=3
//Запрос2
SELECT r1.Компания, r1.Дата, (select count(*) from комдата as rr where rr.Компания = r1.Компания and rr.Дата >= r1.Дата) AS xx
FROM комдата AS r1
ORDER BY r1.Компания, r1.Дата DESC
Чуть-чуть читабельнее :)