🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #195129

Re: [MS SQL] Usuwanie rekordów oprócz tych najbliższych danej godziny.

#195129
From: Marcin G.
Date: Fri, 28 Oct 2016 08:20
44 lines
2968 bytes
Użytkownik "geos"  napisał w wiadomości grup 
dyskusyjnych:5812fd64$0$5146$65785112@news.neostrada.pl...

> nie pracuję na sql serverze, ale widze w dokumentacji, ze jest funkcja 
> first_value:
>
> https://msdn.microsoft.com/en-us/library/hh213018.aspx
>
> pozwoli Ci ona uzyskać wartości z rekordów, które są najbliżej jakiejś 
> godziny. w ogólności mogą to być dwa rekordy (np. sekunda przed i sekunda 
> po północy są tak samo "oddalone" od północy).
>
> poniższy sql działa dla oracle ale łatwo przerobisz na sql server. zwroci 
> jedną wartość z puli rekordów "najbliższych" północy. jeśli chcesz aby 
> było to bardziej deterministyczne dodaj do order by jeszcze jeden warunek 
> priorytetyzujący np. znak różnicy miedzy północą a kolumną datetime.
>
> select distinct first_value(t) over (order by abs(trunc(sysdate)-t))
> from tabela;
>
> jeśli chcesz aby np. takie usuwania odbywało się w jakimś cyklu, np. 
> dziennym i aby pozostawał tylko jeden rekord dziennie to powyższe 
> zapytanie powinieneś uzupełnić o klauzule partition by:
>
> select distinct first_value(t) over (partition by trunc(t) order by 
> abs(trunc(sysdate)-t))
> from tabela;
>
> distinct jest opcjonalny. umieszczając powyższe jako podzapytanie usuniesz 
> wszystkie rekordy i zostawisz po jednym rekordzie najbliższym północy:
>
> delete from tabela
> where t is not in ( <podzapytanie> );
>
> pozdrawiam
> geos


Dzięki.
Po przeróbkach działa tak jak chciałem.


Pozdrawiam,
Marcin G.
Technical Details
Message-ID: <58130a5c$0$651$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!cyclone01.ams2!voer-me.highwinds-media.com!peer01.am4!peer.am4.highwinds-media.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <5811ea0f$0$5164$65785112@news.neostrada.pl> <5812fd64$0$5146$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!cyclone01.ams2!voer-me.highwinds-media.com!peer01.am4!peer.am4.highwinds-media.com!peer03.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
From: "Marcin G." <sq9etc_usun_to_@poczta_usun_to_.onet.pl>
Newsgroups: pl.comp.bazy-danych
References: <5811ea0f$0$5164$65785112@news.neostrada.pl> <5812fd64$0$5146$65785112@news.neostrada.pl>
In-Reply-To: <5812fd64$0$5146$65785112@news.neostrada.pl>
Subject: Re: [MS SQL] Usuwanie rekordów oprócz tych
 najbliższych danej godziny.
Date: Fri, 28 Oct 2016 10:20:37 +0200
MIME-Version: 1.0
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 15.4.3508.1109
X-MimeOLE: Produced By Microsoft MimeOLE V15.4.3508.1109
Lines: 45
Message-ID: <58130a5c$0$651$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 80.48.250.68
X-Trace: 1477642845 unt-rea-b-01.news.neostrada.pl 651 80.48.250.68:62399
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Body-CRC: 2780329133
X-Received-Bytes: 2813
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit