Announcement

Collapse
No announcement yet.

Datum sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datum sortieren

    Guten Tag

    Ich möchte, dass alle Resultate der letzten 30 Tage nach Datum absteigend angezeigt werden.
    Mit nachfolgendem Script werden nur die ersten beiden Datumszahlen unbeachtet des Monats sortiert.

    Code:
    'Alle Daten von heute bis -30 Tage auswählen
    Vor30Datum=Date()-30
    HeuteDatum=Date()
    Vor30Datum=year(Vor30Datum)&Right("0"&Month(Vor30Datum),2)&Right("0"&Day(Vor30Datum),2)
    HeuteDatum=year(HeuteDatum)&Right("0"&Month(HeuteDatum),2)&Right("0"&Day(HeuteDatum),2)
    
    'Query liest alle Clients, Policies, Schedule-Labels und den Backup-Success eines Projekts
    strSQL = "SELECT DISTINCT [client], [policy_name], [schedule_label], [success], [description], SUBString(CONVERT(varchar(8), [date]), 7, 2) " & _
              "+ '. ' + SUBString(CONVERT(varchar(8), [date]), 5, 2) + '. ' + SUBString(CONVERT(varchar(8), [date]), 1, 4) AS realdate, " & _
              "MIN(DISTINCT [start_time]) AS beginn, MAX(DISTINCT [end_time]) AS endtime FROM [job], [job_status] WHERE job_status.status=job.status " & _
              "AND job.job_type=0 AND client= '" & Request.QueryString("client") & "' AND job.schedule_label NOT LIKE '-' AND [date] BETWEEN " & _
              " " & Vor30Datum & " AND " & HeuteDatum & " GROUP BY [date], [client], [policy_name], [schedule_label], [success], [description] " & _
              "ORDER BY [realdate] DESC, [beginn], [client], [policy_name], [schedule_label], [success] DESC, [description]; "
    Resultat:

    29. 09. 2007
    28. 09. 2007
    27. 09. 2007
    26. 09. 2007
    25. 09. 2007
    23. 09. 2007
    22. 09. 2007
    21. 09. 2007
    20. 09. 2007
    19. 09. 2007
    18. 09. 2007
    16. 09. 2007
    15. 09. 2007
    14. 09. 2007
    13. 09. 2007
    12. 10. 2007
    12. 09. 2007
    11. 10. 2007
    10. 10. 2007
    09. 10. 2007
    07. 10. 2007
    06. 10. 2007
    05. 10. 2007
    04. 10. 2007
    03. 10. 2007
    02. 10. 2007

    Kann mir jemand helfen?

    Gruss Tanja
    Zuletzt editiert von pervenches; 12.10.2007, 14:34.

  • #2
    Hallo Tanja,

    kann es sein, das der Datentyp des Feldes "realdate" nicht DateTime ist, sondern varchar? Dann darfst Du Dich auch nicht wundern, das es alphanumerisch sortiert wird.

    Versuch es mal mit
    ORDER BY convert(DateTime, realdate) DESC,...

    Rummst nur, wenn das Feld ein ungültiges Datum enthält.

    Olaf
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo Olaf,

      ja, das Feld "realdate" ist Datentyp varchar.
      Ich habe Dein Vorschlag versucht bekomme aber leider die Fehlermeldung: "invalid column name 'realdate'.
      Weisst Du woran das liegen kann?

      Gruss
      Tanja

      Comment


      • #4
        In Deinem Script steht ja nun auch

        ORDER BY [realdate] DESC,

        aber wie ich gerade sehe, ist "realdate" ein Alias für das Feld "date"; somit dürfte Dein Script unter SQL Server den gleichen Fehler ausgeben.

        Versuch es mal mit
        ORDER BY convert(DateTime, [date]) DESC,...

        Olaf
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          ...das ergibt leider ebenfalls eine Fehlermeldung "ORDER BY items must appear in the select list if SELECT DISTINCT is specified".
          Meinst Du, dass das wirklich so "einfach" geht?. Das Datenfeld "realdate" ist aus drei varchar-Teilen zusammengesetzt. Diese sind mit einem Punkt und einem Leerschlag miteinander verbunden. Kann man unter diesen Bedingungen den ganzen Begriff in Datetime konvertieren?

          Tanja

          Comment


          • #6
            Hallo Tanja,

            das script ist etwas wirr und die Daten kenne ich auch nicht.
            Wenn ich das richtig sehe, steht in "date" so das Datum im Format yyyymmdd.
            Wenn nicht noch mehr drinsteht, müsste folgendes gehen:


            SELECT DISTINCT TOP 30 convert(datetime, [date], 112)
            FROM ...
            WHERE ...
            ORDER BY convert(datetime, [date], 112) DESC

            Das hier klappt auf jeden Fall:
            select TOP 30 convert(datetime, '20070612', 122)


            Olaf
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              Hallo Olaf,

              ja, das Datenfeld "date" ist im Format yyyymmdd. Deshalb habe ich es in der Abfrage umformatiert. Die Ausgabe sollte dd. mm. yyyy heissen. Das Datum wird dynamisch abgefagt, die letzten 30 Tage, deshalb kann ich auch kein fixes Datum eingeben. Die Select-Anweisung kann ich kaum ändern, es müsste wirklich über die ORDER BY-Klausel geschehen.

              Gruss
              Tanja

              Comment


              • #8
                ...ist vielleicht etwas in dieser Art möglich?
                (Zusammenhängen des ersten - tt und des zweiten Teildatums und anschliessend ordnen)

                ORDER BY CAST(SUBString([realdate], 2, LEN([realdate])+1) + ([realdate], 6, LEN([realdate])+5) AS int) DESC

                Genau diese Eingabe ergibt ein Syntaxfehler...
                Zuletzt editiert von pervenches; 16.10.2007, 09:42.

                Comment


                • #9
                  Da fehlt ein SubString

                  ORDER BY CAST(SUBString([realdate], 2, LEN(retention.description) + 1 ) +
                  SUBSTRING([realdate], 6, LEN(retention.description)+5) AS int) DESC

                  Ansonsten kannst Du noch probieren, es nach den Einzelteilen des Datums, wie Du es für realdate nutzt, zu sortieren:

                  ORDER BY SUBString(CONVERT(varchar(8), [date]), 1, 4) DESC,
                  SUBString(CONVERT(varchar(8), [date]), 5, 2) DESC,
                  SUBString(CONVERT(varchar(8), [date]), 7, 2)
                  Olaf Helper

                  <Blog> <Xing>
                  * cogito ergo sum * errare humanum est * quote erat demonstrandum *
                  Wenn ich denke, ist das ein Fehler und das beweise ich täglich

                  Comment


                  • #10
                    Hallo

                    Leider bekomme immer noch Fehlermeldungen.

                    Bei der 1. Variante:
                    Invalid column name 'realdate'.

                    und bei der 2. Variante:
                    ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

                    und wenn ich dann date durch realdate ersetzte kommt wieder die Fehlermeldung:
                    Invalid column name 'realdate'.

                    Kann mir jemand weiter helfen?

                    Gruss
                    Tanja

                    Comment


                    • #11
                      Originally posted by pervenches View Post
                      Invalid column name 'realdate'.
                      ...
                      realdate ist ja auch kein Tabellenfeld an sich sondern 'nur' ein Alias, welcher für die Anzeige im Resultset verwendet wird. Und so weit ich mich recht entsinne, sind Alias-Bezeichner in ORDER BY, GROUP BY etc nicht erlaubt...

                      Comment


                      • #12
                        Hallo Tanja,

                        bei Deinem SQL-Statement sind mir einige Dinge aufgefallen. Obwohl das Ganze eine GROUP BY Klausel enthält, schreibst Du SELECT DISTINCT. Was soll das bewirken? Nichts! Auch innerhalb von MIN(DISTINCT [start_time]) AS beginn, MAX(DISTINCT [end_time]) AS endtime hat das DISTINCT keine Wirkung, Das macht eigentlich nur Sinn, wenn COUNT(), SUM(), AVG() usw. benutzt werden.
                        Die, nach meiner Meinung, einfachste Lösung für Dein Problem wäre aber die, dass Du einfach im SELECT das Feld [date] mit angibst (gruppiert wird ja auch danach), und dann im ORDER BY danach sortierst. Auf Clientseite kannst Du das Feld dann einfach ignorieren. Das müsste eigentlich reichen!

                        Gruß
                        Olaf

                        Comment


                        • #13
                          Hallo,

                          hast du schon mal probiert in deinem ursprünglichen Script in der generierung von realdate die Leerzeichen (&nbsp) zu entfernen ?

                          Gruß,
                          Volker

                          Comment


                          • #14
                            Guten Tag

                            Danke für alle Vorschläge und Hilfe soweit. "Distinct" habe ich weggelassen. Das macht effektiv kein Unterschied. Wenn ich das ganze auf "date" belasse, dann funktioniert es zwar, doch der Output ist unformatiert. Das Datum wird dann als yyyymmdd angezeigt. Gibt es villeicht eine Möglichkeit das Datum nicht im Selekt-Statement sonder in der Abruf-Zeile zu formatieren? Ich habe da nichts gefunden:

                            Code:
                            Response.Write"<td>" & objRS("realdate") & "</td>"
                            Wenn ich die Leerzeichen weglasse wird nach der Reihenfolge der Zahl geordnet. September "09" kommt z.B. nach Oktober "10".

                            Gruss
                            Tanja

                            Comment


                            • #15
                              Hallo Tanja,

                              die Fehlermeldung bezieht sich auf den Namen. Du mußt nur darauf achten, dass der Feldname in Order by auch im select so bezeichnet wird.


                              ZB:
                              select ... ausdruck as sortierdatum from Tabelle
                              Order by sortierdatum

                              Gruß frauwue
                              docendo discimus

                              Comment

                              Working...
                              X