Exactly. Is there a way to consider only cases such as  +0, -10, +0 (i.e. 
spikes) and not those like  +0, -6. -8 ?
Meanwhile I thank you for your precious help.
Andrea

Il giorno giovedì 30 settembre 2021 alle 23:03:35 UTC+2 wfs...@gmail.com ha 
scritto:

> Just a reminder, this delete query will delete all situations where the 
> criteria is met.  Some of these situations are legit, temps can change 
> rapidly.  You want to make sure it's going to delete only the records you 
> want before running it.  There are probably some enhancements that can be 
> made to the query to find more obvious spikes.  Something like +0, -10, +0 
> might be a spike, whereas +0, -6. -8 is not, the temp is just falling fast.
>
> On Thursday, September 30, 2021 at 1:11:05 PM UTC-5 wfs...@gmail.com 
> wrote:
>
>> Well, make sure you back up your database before you try to delete 
>> anything in case this goes wrong.  I would
>>
>> 1. Stop weewx
>> 2. Make a copy of the database
>> 3. Execute the delete SQL
>> 4. Run the original query again to see if things are OK
>> 5. Rebuild weewx dailies
>> 6. Start weewx
>>
>> Hopefully I'm not forgetting anything.
>>
>> I'm attaching SQL to delete the spiked records.  You will have to change 
>> the database name in the .open statement to the db you want to change.  You 
>> may need to run sqlite3 with sudo in order to delete records.
>>
>> I thought a better solution would be to update the spiked temp with an 
>> average of the readings surrounding the spike, but I'm having trouble 
>> coming up with the SQL to do that.
>>
>> Walt
>> On Thursday, September 30, 2021 at 9:41:17 AM UTC-5 anc...@gmail.com 
>> wrote:
>>
>>> Thank you Walt, this script works fine! in fact it highlighted that 
>>> spike in my graph:
>>>
>>> DT                   datetime    temp              temp_prior        
>>> temp_next         variance    d_back              d_forw
>>> -------------------  ----------  ----------------  ----------------  
>>> ----------------  ----------  ------------------  ----------------
>>> 2021-09-30 04:15:00  1632968100  19.2970370370371  19.3363567649282  
>>> 14.5003779289494  2.38        0.0393197278911508  4.79665910808766
>>>
>>> (I added two columns d_back = |t1-t2| and t_forw = |t1-t3|)
>>> Now, I need to delete the wrong record: in this case, it is t3 (d_forw = 
>>> 4.8). How can I automatically find it and then remove? Unfortunately I 
>>> don't know the sql language and I can't complete the script myself.
>>>
>>> Thank you very much,
>>> Andrea
>>> Il giorno giovedì 30 settembre 2021 alle 15:27:37 UTC+2 wfs...@gmail.com 
>>> ha scritto:
>>>
>>>> Here's a query using the "join a table to itself" method if you don't 
>>>> have the LAG function.  It prints observations that are outside the 
>>>> average 
>>>> of the surrounding observations by 2+ degrees.  I get about 30 
>>>> observations 
>>>> this year and I think it's legit.  Although I don't get spikes in my data, 
>>>> I do use a 15 minute interval and my station is closer to the ground than 
>>>> it should be.  A lot can happen in 15 minutes and my temp graph is always 
>>>> kinda wiggly.
>>>>
>>>> Caveat Emptor on the attached query.  You could modify it to delete or 
>>>> update the offending rows instead of printing them out.
>>>>
>>>> Walt
>>>>
>>>>
>>>> On Thursday, September 30, 2021 at 7:52:41 AM UTC-5 tke...@gmail.com 
>>>> wrote:
>>>>
>>>>> Yes, it's possible, but it's not a simple SELECT statement. For 
>>>>> example, this query will return all rows where the temperature difference 
>>>>> between adjacent rows is greater than 1 degree:
>>>>>
>>>>>
>>>>> *SELECT g.* FROM (SELECT dateTime, 
>>>>> datetime(dateTime,'unixepoch','localtime'),  LAG(outTemp) OVER (ORDER BY 
>>>>> dateTime) AS prev_outTemp, outTemp FROM archive) AS g WHERE 
>>>>> ABS(g.outTemp-g.prev_outTemp) > 1;*
>>>>>
>>>>> For my own database, this returns
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *1192323300|2007-10-13 17:55:00|64.099998|63.01192382100|2007-10-14 
>>>>> 10:15:00|51.900002|53.01192756800|2007-10-18 
>>>>> 18:20:00|44.700001|46.7000011192757100|2007-10-18 
>>>>> 18:25:00|46.700001|49.51192757400|2007-10-18 18:30:00|49.5|47.400002*
>>>>> ...
>>>>>
>>>>> You would then need to arrange to delete those specific timestamps.
>>>>>
>>>>> The select statement will only work with modern versions of sqlite, 
>>>>> which have the LAG() function.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Sep 30, 2021 at 3:35 AM anc...@gmail.com <anc...@gmail.com> 
>>>>> wrote:
>>>>>
>>>>>> Hi there,
>>>>>> I need to remove some temperature spikes from my weewx.sdb database. 
>>>>>> I know this has been already asked many times, but my case is different. 
>>>>>> I 
>>>>>> need to delete spikes in which the values are climatically acceptable: 
>>>>>> so, 
>>>>>> it is not sufficient to give (temperature is intended in °C)
>>>>>>
>>>>>> echo "delete from archive where outTemp < -6;" | sudo sqlite3 
>>>>>> /home/weewx/archive/weewx.sdb
>>>>>>
>>>>>> for solving the problem. In my case, the spike was about 16°C when 
>>>>>> temperature was about 20°C (see the graph below)
>>>>>> [image: daytempdew.png]
>>>>>> What I need to do is something like: DELETE if Δt = 300 AND |ΔT| > 5, 
>>>>>> where 
>>>>>> Δt is time difference (in seconds, I chose 300 because my archive 
>>>>>> interval is 5 minutes) and ΔT is the temperature difference in that time 
>>>>>> bin. 
>>>>>> In other words I am thinking about using a differential approach. It 
>>>>>> seems to me that this can be the only solution, is this possible with 
>>>>>> sqlite3?
>>>>>> Thank you,
>>>>>> Andrea
>>>>>>
>>>>>> -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "weewx-user" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to weewx-user+...@googlegroups.com.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/weewx-user/32298c8c-6d93-4a80-8b9e-29fdcc181c8an%40googlegroups.com
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/weewx-user/32298c8c-6d93-4a80-8b9e-29fdcc181c8an%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to weewx-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/4c7224eb-1bda-4b76-88d9-2d1b2185990bn%40googlegroups.com.

Reply via email to