Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SELECT TOP (COUNT(*) - N) FROM .. 
:(
    Опции темы
puZzo
Дата 12.4.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Добрый день Уважаемые)
В таблице есть N записей, как выбрать из них только последние за выбранный промежуток времени, зная только сколько у меня уже есть из этого промежутка записей, но не зная сколько записей в этом промежутке всего? есть только уже прочитанные, нужно дополнить недостоющими.. т.е.:

Таблица:
1з 2з 3з 4з 5з 6з 7з 8з 9з 10з ...  (N записей)

В моей программе есть из этой таблицы 6 первых..
нужно недостающие забрать, но я не знаю сколько записей всего..

ключ уникальный есть, время записей не уникально, отслеживать по ключу не вариант.

Код

SELECT *
FROM table a
WHERE (NOT EXISTS (
    SELECT TOP 6 * FROM (
        SELECT * FROM table b 
        WHERE (Time BETWEEN @time1 AND @time2)
        ORDER BY Time DESC) c
    WHERE a.Ключ = c.Ключ))


запрос ни к черту, я его и так и сяк..чет не могу никак сообразить как все таки сделать..
процедуры кстати тоже не вариант..

Это сообщение отредактировал(а) puZzo - 12.4.2011, 09:48
PM ICQ   Вверх
Zloxa
Дата 12.4.2011, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(puZzo @  12.4.2011,  09:46 Найти цитируемый пост)
выбрать из них только последние за выбранный промежуток времени, зная только сколько у меня уже есть из этого промежутка 


Код

select *
from(
  SELECT a.*
    ,row_number() over (order by Time desc)
  FROM table a
  WHERE Time BETWEEN @time1 AND @time2
)
where rn > 6
ORDER BY Time DESC


Это сообщение отредактировал(а) Zloxa - 12.4.2011, 10:10


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
puZzo
Дата 13.4.2011, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



Код

SELECT *
FROM (
      SELECT tabl.*, 
      row_number() OVER (ORDER BY TimeEvent DESC) AS 'RowNumber'
      FROM [zavod].[dbo].[FireFly] tabl
      WHERE (TimeEvent BETWEEN '2011/04/12' AND '2011/04/13')
     ) AS Z
WHERE RowNumber > 6
ORDER BY TimeEvent DESC


ругается:
Сообщение 242, уровень 16, состояние 3, строка 2
Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.

Блин, вместо '2011/04/12' надо '12/04/2011'

Добавлено @ 03:22
Полностью рабочий как мне надо вариант))
Код

SELECT *
FROM (
      SELECT tabl.*, 
      row_number() OVER (ORDER BY TimeEvent ASC) AS 'RowNumber'
      FROM [zavod].[dbo].[FireFly] tabl
      WHERE (TimeEvent BETWEEN '12/04/2011 00:00:00' AND '13/04/2011 00:00:00')
     ) AS Z
WHERE RowNumber > 6
ORDER BY TimeEvent


Zloxa, Спасибо!  smile 


Это сообщение отредактировал(а) puZzo - 13.4.2011, 03:23
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.