Article View: pl.comp.bazy-danych
Article #194689Re: Najbliższa data z przyszłości lub z przeszłości
From: Paweł Broda
Date: Fri, 20 Nov 2015 12:15
Date: Fri, 20 Nov 2015 12:15
50 lines
2567 bytes
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-mailReferences:
<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