Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];

Вниз

SQL Запрос   Найти похожие ветки 

 
vitnt2000   (2002-04-03 06:42) [0]

У меня есть база, в которой содержатся поминутные значения параметра за несколько лет:
Время Значение
Подскажите пожалуйста, как построить запрос чтобы получить значение параметра раз в час (в сутки), за определенный промежуток времяни? т.е для значений времяни кратных часу (суткам).


 
arhelon   (2002-04-03 07:59) [1]

Какая база ???
попробуй так
Допустим t-datatime a z - значение
select
(z/count(*)) енто среднее
group by to_char(t,"dd/mm/yyyy hh24")
Енто для Оракла прокатит
ежли не оракля то попробуй с cast поизголяться



 
arhelon   (2002-04-03 08:01) [2]

Извени с утра тормозю посмотри аналог to_date на MSSQL должен быть.
У мня такая фича прокатила со звонками (и мин, и час и день и месяц) так что пробуй


 
sniknik   (2002-04-03 10:40) [3]

Для MSSQL выделить час из даты/времени и сравнивать в запросе

DATEPART ( datepart , date )
datepart возможные значения
year
quarter
month
dayofyear
day
week
weekday
hour
minute
second
millisecond

или .... WHERE CONVERT(char(20), datetime, 14) LIKE "02%"
(за 2-й час) 14 фомат первым час возвращает hh:mi:ss:mmm(24h)


 
SergSuper   (2002-04-03 10:58) [4]

в mssql так просто дату не сконвертировать
надо или взять за базу какую-то дату и считать от неё разницу в часах(datediff(hh, base_date, t)) или обрезать строковое представление даты
select substring(convert(varchar(22),t,120),1,13)

ну и среднее надо считать как sum(z)/count(*), а еще лучше как avg(z), это и в Оракле должно быть


 
sniknik   (2002-04-03 11:20) [5]

как это так просто не сконвертировать? очень просто, специально проверил для гарантии (а то вдруг память подводит, второй пример мне показался удобнее)

select *,CONVERT(char(20), [date], 14) from cashsail
where CONVERT(char(20), [date], 14) like "00%
работает.
(в этом случае выдает все записи, поле date было датой до переноса из dbf и во времени стоят нули)
так же работает для поля [time] (только тут надо значение часа ставить оно есть, а в дате нули)


 
SergSuper   (2002-04-03 12:43) [6]

2 sniknik
Прочитайте повнимательней что я написал.
Функций, которые бы конвертировали бы дату в строку по маске в MSSQL к сожалению нет, поэтому приходиться ковертировать в строку заданного формата, а потом её обрезать. В Оракле это делается проще.

Если написать, как Вы предлагаете, CONVERT(char(20), [date], 14) like "00%, то в выборку не попадут данные у которых есть минуты, в данном случае это не подходит.



 
sniknik   (2002-04-03 13:38) [7]

Может я неправильно понял вопрос межет мы говорим про разные вещи но я так понял человеку нужно именно значение часа т.е. с часа до двух или с двух до трех, сквозное не зависимо от дня. а для этого мой пример замечательно подходит.
и туда попадают все данные с минутами (проверял) за указанный час. См. BOL по форматам - 14 - hh:mi:ss:mmm(24h) (возможно этого формата нет в 7 SQL? у вас семерка?иначе зачем вы режете строку)
но в этом случае тоже можно выйти из положения формат 8 108 - hh:mm:ss более ранний должен быть и тоже час первый.
или ваш любимый но не резать а набрать строку для LIKE "____:__:__:02%" например так (по формату), по моему проще чем вырезать.


 
sniknik   (2002-04-03 13:45) [8]

P.S. источник возможнго недопонимания - в MSSQL для LIKE символ "_" означает любой символ, а "%" любую строку.


 
SergSuper   (2002-04-03 14:54) [9]

Может дело и в недопонимании

declare @t table(t datetime, z float)
insert @t select "20010101 10:00",1 union
select "20010101 10:02",2 union
select "20010101 10:02",3 union
select "20010101 11:00",4

select substring(convert(varchar(22),t,120),1,13), avg(z) from @t
group by substring(convert(varchar(22),t,120),1,13)

Напишите Ваш вариант


 
sniknik   (2002-04-03 15:46) [10]

с групировкой тогда так
(изменил ваш пример)
declare @t table(t datetime, z float)
insert @t select "20010101 10:00",1 union
select "20010101 10:02",2 union
select "20010101 10:05",3 union
select "20010101 11:00",4

select DATEPART(hour,t), avg(z) from @t
group by DATEPART(hour,t)

а я имел в виду просто выборку тогда удобнее так (мне кажется)

select * from @t
where CONVERT(char(20), t, 14) like "10%"
(заметь минуты разные а выводятся :O)


 
SergSuper   (2002-04-03 16:53) [11]


select DATEPART(hour,t), avg(z) from @t
group by DATEPART(hour,t)

прэлесно
а если будут данные за другой день?

а я имел в виду просто выборку тогда удобнее так (мне кажется)

select * from @t
where CONVERT(char(20), t, 14) like "10%"

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

(заметь минуты разные а выводятся :O)

Выводятся, но только три записи из четырёх.

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

Если есть еще вопросы - по почте, я думаю vitnt2000 получил достаточно информации

С приветом Сергей



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
1-80850
easy
2002-04-12 19:22
2002.04.25
Программное создание меню


3-80770
ava
2002-04-04 14:31
2002.04.25
SQL


6-81030
Realizator
2002-02-13 09:49
2002.04.25
Интересно, хоть кто-нибудь смог бы написать РАБОЧИЙ Telnet? Под сервер UNIX никак не пашет!


1-80991
eSKey
2002-04-12 15:38
2002.04.25
Кто знает - шифрование и хранение пароля


14-81070
savva
2002-03-20 10:37
2002.04.25
Товарищи!! У нас есть возможность отличиться! (и пивка стребовать на халяву о-)) )





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский