Hallo Wissende,
wie kann man die folgende SQL Abfrage formulieren um Datum & Count für jeden Tag zu bekommen?
Das Ergebniss sollte so aussehen:
Count date
3 2015-07-01
39 2015-07-02
32 2015-07-03
…
Hier die SQL ABFRAGE:
SELECT COUNT(DISTINCT u.USER_IP), date(u.date)
FROM user_visits u WHERE date(u.date)>‚2015-07-01‘ Order BY date(u.date) ASC
date(u.date)… da u.date in diesem Format is 2015-07-01 00:00:00
Vielen Dank,
Mini
Moin,
da fehlt doch ein Group by u.date. Und wo bleibt USER_IP in der Liste?
Gruß Ralf
Order by u.date ASC , da wäre date eh falsch, weil dann wird falsch sortiert , deswegen steht das bei u.date auch so , damit man es sortieren kann
12.08.2011
12.08.2010
11.08.2011
11.08.2010
siehste den Fehler ?
deswegen anders rum , damit wenn schon nach zahlen dann richtig .
2011.08.12
2011.08.11
und erst mit Group by kannst du auch COUNT verwenden , somit würden dann alle am selben Tag gezählt werden
Fantastisch Group by functioniert Danke 
Gibt es eine Möglichkeit die Dauer dieses Queries zu verkürzen?
Es analysiert zusätzlich zur Abfrage noch Social Media Accounts:
SELECT
COUNT(DISTINCT u.USER_IP) AS COUNTS,
(SELECT COUNT(DISTINCT a.USER_IP) FROM user_visits a WHERE LEFT(prev_page, 24) = ‚https://www.facebook.com‘ AND date(a.date)=date(u.date)) AS FACEBOOK,
(SELECT COUNT(DISTINCT a.USER_IP) FROM user_visits a WHERE LEFT(prev_page, 24) = ‚https://www.linkedin.com‘ AND date(a.date)=date(u.date)) AS Linkedin,
(SELECT COUNT(DISTINCT a.USER_IP) FROM user_visits a WHERE LEFT(prev_page, 24) = ‚https://www.twitter.com‘ AND date(a.date)=date(u.date)) AS Linkedin,
date(u.date) AS DATE,
DAYNAME(u.date)
FROM user_visits u WHERE LEFT(page, 3) = ‚www‘ AND date(u.date)>‚2015-07-01‘ GROUP BY date(u.date) DESC
Fantastisch Group by functioniert Danke
)
Gibt es eine Möglichkeit die Dauer dieses Queries zu verkürzen?
SELECT
COUNT(DISTINCT u.USER_IP) AS COUNTS,
(SELECT COUNT(DISTINCT a.USER_IP) FROM user_visits a WHERE LEFT(prev_page, 24) = ‚https://www.facebook.com‘ AND date(a.date)=date(u.date)) AS FACEBOOK
FROM user_visits u WHERE LEFT(page, 3) = ‚www‘ AND date(u.date)>‚2015-07-01‘ GROUP BY date(u.date) DESC
Moin,
auf prev_page muss ein Index liegen, wobei ich nicht sicher bin, ob der bei LEFT überhaupt zieht. Hat die DB einen Optimizer? Dann sollte damit auch zu sehen sein, welche Indizes benutzt werden. DB2 kennt dazu den Befehl Explain.
Gruß Ralf
ich verstehe dein date(u.date) schachtel nicht … a.date=u.date … warum also eine funktion setzen wo schon ein datum drinne ist … das feld ist doch typ date , also lass es weg .