![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос для [MSSQL]
KAA © (2002-03-19 16:10:00)Есть таблица "Склад": идентификатор (ключевое поле, автоматически увеличивается для каждой новой записи), наименование детали, цвет детали. В таблицу неограниченное число раз добавляют записи, указывая тип делтали и ее цвет.
Задача: У нас где-то задано кол-во деталей (N). Надо выбрать из таблицы последние поступившие на склад N деталей заданного наименования и заданного цвета.
Donal_Graeme (2002-03-19 17:19:00) [21]хм...а где-то - это где? в программе, или в базе? если в программе, то можно делать динамический запрос, а если на сервере, то, наверное только двумя запросами...
Lusha (2002-03-19 17:18:00) [22]>KAA
Имеется в виду
SELECT TOP :N ...
И в тексте программы
AnyQuery.ParamByName("N").AsInteger := n;
А на крайний случай всегда можно писать так...
AnyQuery.SQL.Text := Format("SELECT TOP %d...", [n]);
Удачи
KAA (2002-03-19 17:13:00) [23]>Lusha
Имеется ввиду SELECT TOP @N ? Не проглатывает.
>DiggerAbstract
Это для какой SQL? Честно говоря я даже не знаю, как звучит аналог ROW_NUMBER() для MSSQL2000, да и с конструкцией OVER я еще не сталкивался.
Johnmen (2002-03-19 16:49:00) [24]>KAA © : Как по номеру можно определить степень новизны записи ? :)
DiggerAbstract (2002-03-19 16:47:00) [25]что-то типа
SELECT
*
FROM
table T1
INNER JOIN (
SELECT
ROW_NUMBER() OVER(ORDER BY T.ID DESC) AS NUM,
T.ID
FROM
table T ) AS T2 ON T1.ID=T2.ID AND T2.NUM<= {N}
Lusha (2002-03-19 16:45:00) [26]А что работа с параметром не прокатывает?
KAA (2002-03-19 16:39:00) [27]>Johnmen
Не важно за какой период, у нвых идентификатор больше будет.
>Donal_Graeme
Взять N первых, если использовать SELECT TOP 50 в MSSQL2000, кол-во можно задать константой, а надо прочитать из ппеременной.
Donal_Graeme (2002-03-19 16:33:00) [28]N последних :-)
думаю, что не получится кроме как тупо выбрать все записи заданного наименования и цвета, отсортировав их по дате, и затем взять N последних (или первых, в зависимости от сортировки)
Johnmen (2002-03-19 16:22:00) [29]А последние поступившие - в каком смысле ?
За день, за год, за секунду ???