Witam, napisałem na razie to:
SELECT P.Imię+ ' ' + P.Nazwisko AS Pracownik, z.DataZamówienia
FROM Pracownicy p JOIN Zamówienia z ON p.IDpracownika=z.IDpracownika;
Tylko nie wiem jak obliczyć co ile dni, średnio, każdy pracownik przyjmuje kolejne zamówienie. Powyższy kod zwraca :
no i to się ciągnie dalej.
Tutaj jeszcze wklejam jak wygląda kolumna data zamówienia dla przykładowego 1 pracownika:
SELECT tab2.DataZamówienia, tab2.Pracownik
FROM (SELECT z.DataZamówienia, p.Imię+' '+p.Nazwisko AS Pracownik
FROM Pracownicy p JOIN Zamówienia z ON p.IDpracownika=z.IDpracownika
WHERE p.Imię='Margaret' AND p.Nazwisko='Peacock'
) AS tab2
ORDER BY tab2.DataZamówienia;
I kod zwraca to:
oczywiście wyniki ciągną się w dół. Bardzo proszę o pomoc.
np. Obliczasz dystans w dniach pomiędzy kolejnymi zamówieniami a potem z tego liczysz średnią
albo różnica w dniach pomiędzy pierwszym a ostatnim podzielona na ilość zamówień -1
Marius.Maximus napisał(a):
np. Obliczasz dystans w dniach pomiędzy kolejnymi zamówieniami a potem z tego liczysz średnią
albo różnica w dniach pomiędzy pierwszym a ostatnim podzielona na ilość zamówień -1
Właśnie nad tym myślałem tylko jak obliczyć dystans pomiędzy kolejnymi zamówieniami? Nie mam pomysłu jak zapisać to w kodzie.
Wystarczy zagregować dane czyli wybrac minimalną i maksymalną datę i podzielić przez liczbę tych dat:
Select
Pracownik
,DATEDIFF(d,mindt,maxdt)/i srednia
FROM (
SELECT
P.Imię+ ' ' + P.Nazwisko AS Pracownik
,min(z.DataZamówienia) mindt
,max(z.DataZamówienia) maxdt
,count(*) i
FROM
Pracownicy p
JOIN Zamówienia z ON p.IDpracownika=z.IDpracownika
GROUP BY
P.Imię+ ' ' + P.Nazwisko
) dt
Wg mnie to co podał @Panczo jest prawie OK. Tylko należy podzielić nie przez i
, a przez i-1
. (poza tym, że brakuje GROUP BY, ale to MySQL, on wszystko łyka:) )
Dla przykładu dla pierwszych dwóch rekordów:
daty to '2008-09-08' i '2008-09-11' (są to zarówno min i max). Różnica pomiedzy tymi rekordami wynosi 3, a ilość rekordów to 2.
Więc z zapytania wynikałoby, że co 1.5 dnia otrzymują zamówienie.
Ja osobiście zrobiłbym to na funkcji okna - LAG.
Przykład poniżej: (oczywiście nieco zmodyfikowany po posgtresql)
http://sqlfiddle.com/#!15/af463/10