🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Najbliższa data z przyszłości lub z przeszłości

#194689
From: Paweł Broda
Date: Fri, 20 Nov 2015 12:15
50 lines
2567 bytes
najprościej byłoby funkcjami analitycznymi - ale są niestety (?) niedostepne w mysql... 

poniżej masz rozwiązanie w ansi-sql. tylko musisz zamienić oraclowe sysdate na odpowiednik w mysql.

jeśli możesz mieć więcej niż 1 kontakt per firma per dzień to musisz sobie jeszcze jakiś warunek na top 1 ustawić.

WITH min_future_dates AS
 (SELECT id_firmy,
         MIN(data) AS future_date
    FROM kontakty
   WHERE data >= SYSDATE
   GROUP BY id_firmy),

future AS
 (SELECT id_firmy,
         osoba,
         data
    FROM kontakty k
    JOIN min_future_dates d
      ON k.id_firmy = d.id_firmy
     AND k.data = d.future_date),

max_past_dates AS
 (SELECT SELECT id_firmy,
                MIN(data) AS past_date
           FROM kontakty
          WHERE data < SYSDATE
          GROUP BY id_firmy
  ),

past AS
 (SELECT id_firmy,
         osoba,
         data
    FROM kontakty k
    JOIN max_past_dates d
      ON k.id_firmy = d.id_firmy
     AND k.data = d.past_date)

SELECT f.firma,
       coalesce(t.osoba, p.osoba) AS osoba,
       coalesce(t.data, p.data) AS data
  FROM firmy f
  LEFT JOIN future t
    ON (f.id_firmy = t.id_firmy)
  LEFT JOIN past p
    ON (f.id_firmy = p.id_firmy)

Pozdrawiam,
Paweł Broda
Technical Details
Message-ID: <c77e96ed-d0f5-483a-be4f-17ec47c190ea@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!i2no5737088igv.0!news-out.google.com!l1ni3502igd.0!nntp.google.com!i2no5737078igv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <n2ljrj$vkr$1@news.vectranet.pl>

Show Full Headers
Complete Article Headers
X-Received: by 10.66.102.65 with SMTP id fm1mr11273266pab.20.1448021720557;        Fri, 20 Nov 2015 04:15:20 -0800 (PST)
X-Received: by 10.182.196.9 with SMTP id ii9mr173544obc.7.1448021720521; Fri, 20 Nov 2015 04:15:20 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.glorb.com!i2no5737088igv.0!news-out.google.com!l1ni3502igd.0!nntp.google.com!i2no5737078igv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.bazy-danych
Date: Fri, 20 Nov 2015 04:15:20 -0800 (PST)
In-Reply-To: <n2ljrj$vkr$1@news.vectranet.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=194.0.240.206; posting-account=fKvxEAoAAAAaXZSkKFQkID0nr0tgYJgq
NNTP-Posting-Host: 194.0.240.206
References: <n2ljrj$vkr$1@news.vectranet.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c77e96ed-d0f5-483a-be4f-17ec47c190ea@googlegroups.com>
Subject: Re: Najbliższa data z
 przyszłości lub z przeszłości
From: Paweł Broda <pawel.a.broda@gmail.com>
Injection-Date: Fri, 20 Nov 2015 12:15:20 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit