2016-11-19 7 views
0

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

Таблица содержит следующие типы полей: validtime | DataValue | basistime | pe1 | pe2 | т | s | крышка

validtime является дата/время, которое является действительным для DataValue а basistime является дата/время создания данных. Мне нужно найти max (basistime) между двумя датами/раз.

Это то, что я, как прямо сейчас, но без успеха:

SELECT validtime, datavalue, max(basistime) from ped where lid='XXXXX' and 
and pe1='H' and pe2='G' and t='C' and s='Z' and basistime>='2014-11-19 
12:00:00' and basistime<'2014-11-19 23:45:00' group by ped.validtime,   
ped.datavalue, ped.basistime; 

Я также попытался следующие:

SELECT validtime, datavalue, (SELECT MAX(basistime) from ped where 
lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' and 
basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00') 
from ped where lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' 
and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00'; 

CREATE TEMPORARY TABLE temp AS SELECT basistime, validtime, datavalue, lid, 
pe1, pe2, t, s, from ped where lid='XXXXX' and pe1='H' and pe2='G' and t='C' 
and s='Z' and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 
23:45:00' group by ped.validtime, ped.datavalue; SELECT t.validtime, 
t.datavalue from temp t where t.lid='XXXXX' and t.basistime=max(t.basistime) 
order by validtime ASC; 

CREATE TEMPORARY TABLE temp AS SELECT max(basistime), validtime, datavalue,  
lid, pe1, pe2, t, s, from ped where lid='XXXXX' and pe1='H' and pe2='G' and 
t='C' and s='Z' and basistime>='2014-11-19 12:00:00' and basistime<'2014-11-  
19 23:45:00'; SELECT t.validtime, t.datavalue from temp t where  
t.lid='XXXXX' and t.basistime=max(t.basistime) order by validtime ASC; 

Я также экспериментировал с заливкой basistime как текст и используя BETWEEN для двух дат.

Большинство вышеперечисленных запросов не содержат данных. Первый я опубликовал данные, но даты относятся к 2009 году (очевидно, не между двумя датами, которые я предоставил).

Желаемый результат был бы выход, такие как: validtime, DataValue, макс (basistime)

Я прочитал каждую запись я мог бы найти на StackOverflow и иначе, но я не найти решение, как еще. Заранее благодарю вас за помощь.

+1

пример ваших данных в виде таблицы полезен. Может быть, настроить SQLfiddle? http://sqlfiddle.com/ –

ответ

3

Если вы хотите максимальную (basistime), вы не должны добавить этот столбец в группе

SELECT validtime, datavalue, max(basistime) 
from ped 
where lid='XXXXX' 
and pe1='H' 
and pe2='G' 
and t='C' 
and s='Z' 
and basistime>='2014-11-19 12:00:00' 
and basistime<'2014-11-19 23:45:00' 
group by validtime, datavalue 
-1

Спасибо так много, все. Это оказалось комбинацией двух относительно простых вещей. Как упоминал scaisEdge, мне нужно было добавить basistime в группу по разделам, и мне также не хватало некоторых круглых скобок. Вот окончательная версия:

SELECT validtime, datavalue, max(basistime) from ped 
where lid='XXXXX' and pe1='H' and pe2='G' and t='C' and s='Z' 
and (basistime>='2014-11-19 12:00:00' and basistime<'2014-11-19 23:45:00') 
group by validtime,datavalue,basistime 
order by validtime; 
Смежные вопросы