![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как вытащить из таблицы? [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)
Удачи.