Celle-ci alors :
Select distinct t1.ts as allumage, t2.ts as extinction, timediff(t2.ts,
t1.ts) as durée
From test t1, test t2
Where t1.ts in (SELECT ts FROM test WHERE object =
'heating_cmd_sdb_rdc' and value = 'on')
and t2.ts = (SELECT ts FROM test WHERE object = 'heating_cmd_sdb_rdc'
and value = 'off' and ts > T1.ts order by ts limit 1)
Elle fonctionne avec deux restrictions :
- Pour chaque "On" il faut le "Off" correspondant
- Le timestamp doit être discriminant
Hugues
Le 30/12/2012 16:57, sxpert a écrit :
> On 2012-12-30 16:24, Hugues Levasseur wrote:
>> En une seule requête :
>>
>> SelectT t1.ts as allumage, t2.ts as extinction, timediff(t2.ts,
>> t1.ts) as durée
>> From test t1, test t2
>> Where t1.object = "heating_cmd_sdb_rdc"
>> and t1.value = "on"
>> and t2.object = "heating_cmd_sdb_rdc"
>> and t2.value = "off"
>> and t1.ts < t2.ts
>>
>> Hugues
>
> ca ne fonctionne plus des que tu as plusieurs événements :
>
> Select t1.ts as allumage, t2.ts as extinction, (t2.ts - t1.ts) as durée
> From test t1, test t2
> Where t1.object = 'heating_cmd_sdb_rdc'
> and t1.value = 'on'
> and t2.object = 'heating_cmd_sdb_rdc'
> and t2.value = 'off'
> and t1.ts < t2.ts;
> allumage | extinction | durée
> ---------------------+---------------------+----------
> 2012-12-29 07:29:40 | 2012-12-29 08:00:00 | 00:30:20
> 2012-12-29 07:29:40 | 2012-12-29 08:48:55 | 01:19:15
> 2012-12-29 08:00:30 | 2012-12-29 08:48:55 | 00:48:25
> (3 rows)
>
>
>
>>
>> Le 30/12/2012 11:16, sxpert a écrit :
>>> On 2012-12-30 09:21, Frédéric wrote:
>>>> On samedi 29 décembre 2012, sxpert wrote:
>>>>
>>>>> bon... ca se fait avec un vrai sgbdr, je sais pas avec mysql ;)
>>>>> *hint*postgres*hint*
>>>>
>>>> Puissant ! Faut que je creuse les view... Je devrais pouvoir faire le
>>>> calcul direct, avec ça.
>>>>
>>>> Merci !
>>>
>>> le secret est dans le "distinct on (on_evt.ts)" ;-)
>>>
>
>