kaptenkirk.w Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 Hi, momentan steh ich anscheinend gewaltig auf der Leitung, aber ich komm einfach nicht auf die richtige Abfrage :-( also: es geht um eine Statistik-geschichte über Webseiten in ASP mit ner Access DB Zwei Tabellen: 1. describing mit url, url-nr und title 2. statistics mit url-nr, total, week und ner menge unwichtigem statistik zeugsl nun kommt die Abfrage: ich brauche die top und bottom 10 sites der jeweiligen letzen Woche. also: von jeder url die eingetragen ist, brauch ich jeweils die der letzen woche und die dann sortiert nach der total nr. ich hoffe das war verständlich :-) Bin ja mal gespannt ob einer von euch draufkommt, aber so wie ich euch kenn bestimmt. Wär nett wenn mir jemand auf die Sprünge helfen könnte :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 Deine Formulierung ist nicht ganz eindeutig. Ich vermute aber mal, dass du die 10 meistbesuchten und 10 am wenigsten besuchten URLs ausgeben willst. Und ich gehe davon aus das du in der Lage bist eine Abfrage mit folgendem Inhalt zu erstellen: URL Anzahl Woche/Datum/etc. xxxxx xxxxx xxxxxxxx xxxxx xxxxx xxxxxxxx xxxxx xxxxx xxxxxxxx Und davon möchtest du nun die TOP10/LAST10 Zeilen haben, bezogen auf die Werte im Feld Anzahl. Richtig? ==> Die ersten und letzten 10 musst du in jeweils eine Abfrage aufteilen: SELECT TOP 10 t.Wert FROM tabelle t order by Wert; SELECT TOP 10 t.Wert FROM tabelle t order by Wert desc; Wenn du dem "Access-SQL" mächtig bist, dann kannst du auch folgende Anweisung direkt eingeben: SELECT TOP 10 t.Wert FROM Tabelle t order by Wert desc union SELECT TOP 10 t.Wert FROM Tabelle t order by Wert Aufpassen: Das Order By ist bei UNION-Abfragen sehr trickreich. Die SQL-Anweidung muss natürlich an deine Feldnamen angepasst werden. Hoffe das hilft. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 danke, aber das mit dem desc und order is mir klar. es geht um die Abfrage an sich, weil wenn ich z.b. das max von week abfrage, damit ich die statistik der jeweils letzen woche krieg, dann bringe ich die DAZUGEHÖRIGE total nicht mehr rein, (weil Agregatfunktion), und ohne total kann ich dann nicht nach top und bottom 10 sortieren. also so ungefähr: SELECT DISTINCTROW describing.url, Max(statistics.week) AS [Max von week] FROM describing INNER JOIN statistics ON describing.[url-nr] = statistics.[url-nr] GROUP BY describing.url; das ist mein Problem, ich krieg die total nicht rein, und das *zensuuur* Access kann anscheinend nichts anderes sinnvolles :-( hoffe jetz ist das Problem verständlicher Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 ACH SO! Jetzt wirds etwas klarer. Wie wäre es mit einer SubQuery? SELECT describing.Title, describing.url, statistics.total, statistics.week FROM statistics INNER JOIN describing ON statistics.[url-nr] = describing.[url-nr] WHERE (((statistics.week)=(select max(week) from statistics))); Jetzt hast du ein Format á la (Title, Total, Week): Title1 250 25 Title2 250 25 ... Wobei die Woche der größte Wert aus der Tabelle Statistics über alle Datensätzte ist (nicht seitenbezogen) Das ganze nun als Abfrage Speichern und die o.g. Methode verwenden. --- Ich hoffe, ichs jetzt richtig verstanden! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 Guuuut, du bist gut, der war schon nicht schlecht, schon ganz nah dran scheint mir, aaaabber: des gibt mir halt nur einen datensatz zurück, soweit war ich auch schon, aber ich brauch ja ALLE Urls mit jeweiliger max.week und zugehöriger total, damit ichs auch noch für top 10 und bottom 10 sortieren kann :-( Hilfe ist das ein Mist *heul* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
hades Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 In der GROUP BY Klausel kannst Du entweder eine Aggregatfunktion verwenden oder Du musst zwingend ALLE Felder angeben. SELECT DISTINCTROW describing.url, Max(statistics.week) AS [Max von week] FROM describing INNER JOIN statistics ON describing.[url-nr] = statistics.[url-nr] GROUP BY max(statiscs.week); oder SELECT DISTINCTROW describing.url, Max(statistics.week) AS [Max von week] FROM describing INNER JOIN statistics ON describing.[url-nr] = statistics.[url-nr] GROUP BY describing.url, max(statiscs.week); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 danke hades, daß du auch helfen willst, aber auch deine zwei varianten mag mein liebes *grrrrrrr* Access nicht! Er sagt mir: can not have aggregate funktion in Group by clause! Langsam glaub ich daß es wirklich nicht funktioniert! Dabei ist es doch gar nicht so schwer was ich will, einfach nur die top und bottom der letzen wochen :-( Ich sitze über dem Problem seit über einer Woche und morgen(!!!) soll ich das Projekt abgeben, ich hab keine Ahnung wie ich das noch schaffen soll. Bis auf die Abfrage ist alles erledigt, war ein großes Projekt, und daran scheiterts jetz?!? Ich glaub ich krieg nen Anfall Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 Kannst du bitte dein Ziel nochmal genau nennen. Zuerst schreibst du: "ich brauche die top und bottom 10 sites der jeweiligen letzen Woche." und dann: aber ich brauch ja ALLE Urls mit jeweiliger max.week und zugehöriger total, damit ichs auch noch für top 10 und bottom 10 sortieren kann --> Und warum dieses DISTINCTROW? ---------------- Ich denke du willst: im 1. Schritt: Eine Zeile pro URL, mit -> "größter" bzw. letzte Woche -> Total für diese URL (Enthält die Anzahl der Seitenaufrufe?) Im 2. Schritt Nur die URL's von Schritt1, mit den Top 10 bzw. Bottom 10 im Feld Total. Und welche Woche möchtest du nun haben? Nur die letzte oder die jeweils letzte? Was passiert, wenn es zu einer URL keine "letzte" Woche gibt, weil sie nicht angeklickt wurde? Die TOP10/BOTTOM10 bziehen sich auf die Totals unabhängig von der Woche, oder? (wie sonst) Kannst du mal die fertige Ausgabe aufschreiben: (z.B.) (Top/Bottom10) URLxx 2000x Woche20 URLxx 1800x Woche20 ... URLxx 10x Woche19 URLxx 5x Woche20 IST DAS RICHTIG? (Das wäre ja eine Statistik, die ich selbst gefälscht hätte :-) Warum nimmst du nicht nur die URL's, die in der letzten Woche auch verwendet wurden. Dann wäre es eine saubere Statistik! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 Hm, irgendwie ist es schwierig des zu erklären anscheinen, also ich versuch es nochmal: ASP Programm mit Access DB in der DB werden statistik daten gesammelt. aufgrund der statistikdaten (wie oft wurde eine seite angeklickt, wie war die bandbreite bla bla) errechnet sich für jede url in jeder woche eine totalnr. die sozusagen die bewertung der seite ist. so, jetzt will ich ausgeben: 1) die besten und schlechtesten Seiten überhaupt also: mySQLtop = "SELECT [statistics].[total], [describing]. FROM describing INNER JOIN statistics ON [describing].[url-nr]=[statistics].[url-nr] ORDER BY 1 DESC;" mySQLtop2 = "SELECT [statistics].[total], [describing]. FROM describing INNER JOIN statistics ON [describing].[url-nr]=[statistics].[url-nr] ORDER BY 1;" gut, macht mir ein sauberes ergebnis und gibt mir die besten und schlechtesten seiten, egal von welcher woche. Um das jetzt zu verfeinern, will ich zusätzlich nochmal die besten und schlechtesten seiten haben (ausgehend von der totalnr), aber nicht von allen wochen, sondern nur daten von der letzen woch (es gibt für jede url, für jede Woche eine totalnr) also möchte ich gerne so ein Ergebnis ungefähr haben (das muß so ausschauen, damit ich noch auf bzw absteigend sortieren kann für top und bottom): url max(week) total www.bla.de 25 65 www.iao.de 24 68 www.koi.de 25 70 usw usw. vorher sehen die tabellen so aus: url max(week) total www.bla.de 14 64 www.bla.de 15 80 www.bla.de 17 54 www.bla.de 25 65 www.iao.de 13 74 www.iao.de 24 68 www.koi.de 20 53 www.koi.de 25 70 also ich will einfach nur, jeweils eine url von jeder, davon die max(week) und die totalnr die zu der jeweiligen woche gehört ist es jetzt klarer oder soll ichs nochmal versuchen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 Jau, klar - warum schreibst du nicht das hier? Abfrage vQueryLastWeek SELECT describing.Title, describing.url, statistics.total, statistics.week FROM statistics INNER JOIN describing ON statistics.[url-nr] = describing.[url-nr] WHERE (((statistics.week)=(select max(week) from statistics s2 where s2.[url-nr]=statistics.[url-nr]))); Das ist m.E. die erste Tabelle. (obwohl die Subquery im ersten Moment ein wenig unsinnig aussieht funktionierts bei meinen Beispieldaten...) Du sagst aber: "es gibt für jede url, für jede Woche eine totalnr" Wirklich? Warum musst du dann die Max_Woche je URL-Ermitteln? Der 2.Teil ist ein wenig komplizierter als zunächst angenommen: Abfrage vTOP10 SELECT TOP 10 vQueryLastWeek.url, vQueryLastWeek.total, vQueryLastWeek.week FROM vQueryLastWeek ORDER BY vQueryLastWeek.total DESC; Abfrage vBOTTOM10 SELECT TOP 10 vQueryLastWeek.url, vQueryLastWeek.total, vQueryLastWeek.week FROM vQueryLastWeek ORDER BY vQueryLastWeek.total; Abfrage vTB20 SELECT * from VTOP10 UNION SELECT * from VBOTTOM10 order by total desc Macht insgesamt 4 Abfragen: Pass auf, wenn du versuchen solltest die TOP10 und BOTTOM10 in eine UNION-Abfrage zu kombinieren - da kommen die ulkigsten Ergebnisse raus!!! So wars das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 Die Maximalwoche deshalb, damit ich nur die daten der letzen woche bekomme :-) aber soll ich dir was sagen, so wies aussieht funktioniert das ohhhmeingottttttt bist du ein schatz *felsbrockenvomherzenfall* aber was zum Geier ist s2? hab ich ja noch nie gehört vorher *amkopfkratz* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 s2 ist nur ein Alias für die Tabelle statistics. Da wir ja eine Unterabfrage auf die gleiche Tabelle machen, so muss doch gesagt werden welche Felder er zum Vergleich nehmen soll. Mit dem Alias kann man das angeben. (Der Name ist egal - hätte auch irgendwie anders heissen können (z.B. stat2 oder nur stat). P.S.: Ich habe oben den Post nochmal aktualisiert. Wegen des TOP/BOTTOM - Problems. Das ist äußerst seltsam in Verbindung mit dem UNION (vollkommen zufällige Werte!!!) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 So mein lieber Olli-Master ich verbeuge mich vor dir, ich rutsche auf den Knien und du bist ab jetzt mein absoluter SQL Guru :-) du bist mein Lebensretter du bist: simply the best!!! und du trägst deinen Master zu recht im Namen!!!! Ich werd jetz mit meinem Schlapptop unterm Arm heimgehen, und mich mit meiner Schmusekuscheldecke auf die Couch schmeißen und dann werd in aller ruhe mein Programm zu ende schreiben, und das alles dank dir!!! Und morgen geb ichs ab und sag, daß mir der Master of SQL geholfen hat :-) ne, im ernst, danke, mein kopf war schon in der schlinge sozusagen :-))), ein haufen Leute warten schon sabbernd und gierig auf das ding und nur an der blöden abfrage hats gehangen. Also, lies weiter fleißig Forum, falls ich wieder mal nen hänger hab :-) DANKE *fühldichgeknutschtknuddeltvonmir* Kirki :e@sy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Olli_Master Geschrieben 23. Mai 2002 Teilen Geschrieben 23. Mai 2002 Nachtrag: Solche Abfragen lernt man, wenn man Access den Laufpass gibt und eine richtiges Datenbanksystem verwendet. Bei SQL lernt man aber niemals aus... Wobei ich nicht sagen will, dass es ein perfektes System gibt - nur bessere und kompliziertere Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kaptenkirk.w Geschrieben 23. Mai 2002 Autor Teilen Geschrieben 23. Mai 2002 Ja, das weis ich, nur leider hat mein Chef auf Access bestanden, aber das ganze Ding soll in der Zukunft eh mal mit nem SQL-Server laufen und in C# umgeschrieben werden... Für normales SQL hätt ich auch ne Lösung gehabt, nur daß mir das *zensur* Access das nicht gefressen hat *grml* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.