Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как вытащить из таблицы? [D5, MSSQL, ]


sasa_ch ©   (2001-12-20 13:02:00) 

Добрый день!
Не смогли бы Вы помочь в построении хитрого Select"a
Как мне из таблицы (2 столбца: данные и время вставки(DateTime))вытащить во View последние записи каждого часа каждого дня ,
т.е.какой период времени (в часах) в таблице столько и вытащить записей (последних в каждом часе)...
У меня sql-server 7.0
Мыльте если кто что думает


Mick   (2001-12-21 10:59:00) [1]

>SergSuper
Только мой план дешевле и не используется связанный подзапрос


SergSuper   (2001-12-21 10:31:00) [2]

2Mick
Можно еще короче
select * from t t where not exists(select * from t x where
datediff(hh,t.date, "20010101")=datediff(hh,x.date, "20010101") and
t.date<x.date)


или если нужна только дата можно через group by
(автору вороса я уже отправил)


sasa_ch   (2001-12-21 09:13:00) [3]

Большое спасибо за помощь!
Просто нет практического опыта работы с SQL(да и вообще с базами), поэтому и....
Best regards.


TSV   (2001-12-20 17:39:00) [4]

> Mick
Да это я реплику кинул к своему же примеру.

Твой способ конечно лучше.


Mick   (2001-12-20 17:34:00) [5]

Я очень сомневаюсь в этом


TSV   (2001-12-20 17:27:00) [6]

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


Mick   (2001-12-20 17:25:00) [7]

А вот так намного короче:

Create View MyView as
Select Year(DATEFIELD),Month(DATEFIELD),DAY(DATEFIELD), DatePart(hh,DATEFIELD), MAX(DATEFIELD) ADate
From MYTABLE
GROUP BY Year(DATEFIELD),Month(DATEFIELD),DAY(DATEFIELD), DatePart(hh,DATEFIELD)

Select DATEFIELD,ANYOTHERFIELD From MyTable
Where DATEFIELD IN (Select ADAte From MyView)


TSV   (2001-12-20 16:54:00) [8]

Может быть во так:

select a1.street, datepart(yyyy, a1.date_in) as god, datepart(mm, a1.date_in) as mes, (datepart(dd, a1.date_in)) as den,
datepart(hh, a1.date_in) as chas, datepart(mi, a1.date_in) as minut from apartments a1
where datepart(mi, a1.date_in) =
(select max(datepart(mi, a2.date_in)) from apartments a2 where
datepart(yyyy, a1.date_in) = datepart(yyyy, a2.date_in) and
datepart(mm, a1.date_in) = datepart(mm, a2.date_in) and
datepart(dd, a1.date_in) = datepart(dd, a2.date_in) and
datepart(hh, a1.date_in) = datepart(hh, a2.date_in) and
datepart(mi, a1.date_in) = datepart(mi, a2.date_in))
group by street, datepart(yyyy, a1.date_in), datepart(mm, a1.date_in), (datepart(dd, a1.date_in)),
datepart(hh, a1.date_in), datepart(mi, a1.date_in)
order by datepart(yyyy, a1.date_in), datepart(mm, a1.date_in), (datepart(dd, a1.date_in)),
datepart(hh, a1.date_in), datepart(mi, a1.date_in)


Удачи.


Наверх

Титульная страница Поиск, карта сайта Написать письмо