AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SELECT TOP ... DESC umsortieren
Thema durchsuchen
Ansicht
Themen-Optionen

SELECT TOP ... DESC umsortieren

Ein Thema von süden · begonnen am 9. Jan 2014 · letzter Beitrag vom 9. Jan 2014
Antwort Antwort
Seite 1 von 2  1 2      
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#1

SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 00:10
Datenbank: Access / SQL Server • Version: 2010 • Zugriff über: ADO
Hallo,

ich habe eine Stundenliste mit Datum.
Damit der Nutzer nicht alle Daten laden muß und ich nicht weiss, wann die letzten Einträge ware,
habe ich SELECT TOP 20 gewählt.

Ich benutze ein cxGrid von DEVEX im Gridmode, sonst wird das Ding bocklangsam wenn der Nutzer > 500 Datensätze abruft.

Im Gridmode sortiert das Grid nicht selbst, sondern ich über SQL.
Wenn ich jetzt von DESC auf ASC umschalte dann holt die Abfage die daten von 1965 (oder so).

Wie kann ich das verhindern?
Hat jemand einen Rat?
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#2

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 00:19
Mann, da grübel ich rum wie blöd, kaum hab ichs hier geschrieben, habe ich die Lösung.

Soll ich schreiben wie? Oder wisst ihr das alle?
Na gut.

Code:
SELECT * FROM tStunden
WHERE [Datum] IN (SELECT TOP 20 [Datum] FROM tStunden ORDER BY [Date] DESC)
ORDER BY [Date]
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 07:20
Wenn dein cxGrid schon bei 500 Records lahm wird, liegt der Fehler bei Dir. Das Teil wird erst bei >5000 Recs etwas behäbig. Ich hab bis zu 2000 im Grid (150 Spalten) und der Anwender merkt nix.

Edit: Sollte nicht auch das gehen:
Code:
select top 20 * from Tabelle order by Feld
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 08:27
Es geht ja wohl um die absteigende Sortierung.
Das in kann man sich sparen, man muss die Top Menge nur umdrehen.

Code:
Select * from
  (SELECT TOP 20 [Datum] FROM tStunden ORDER BY [Date] DESC)
order by [Datum]
Bezüglich Performance die Standardfrage:
Wie sieht es mit Indizierung aus?
Gruß, Jo
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#5

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 11:50
Zitat:
Das in kann man sich sparen, man muss die Top Menge nur umdrehen.
Hat Du das mal probiert?


Index ist da, aer im Hintergrund läuft noch ne Menge Zeug - kann ich sicher noch optimieren.

Es geht eigentlich nicht um die 500, da ist nur eine leichte Verzögerung zu spüren,
sondern um das Angebot an den Nutzer, sich auch mal einen größeren Zeitraum anzuschauen.
Das können dann 10-tausende sein.
JA, ich weiß. bei vielen träuben sich die Nackenhaare.
Aber, ich bin selbst Nutzer, habe das Programm programmiert, weil ich genau das wollte (u.A.).
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 11:55
Für Access nicht zu gebrauchen da hier üblicherweise mit clServer gearbeitet wird, aber für SQL-Server mit Datenmengen die den Gridmode benötigen (~>5000) verwende ich ein Event in meinem Template welches den Views zugeordnet wird um die Daten entsprechend der über dass Grid zu definierenden Sortierungen clientzseitig über ADO-Sort abfackelt.

Delphi-Quellcode:
Const
C_SORTTYPE:Array[TcxDataSortOrder] of String=('ASC','ASC','DESC');

procedure TTemplate.AllGridDataControllerSortingChanged(Sender: TObject);
var
 i:Integer;
 sl:TStringList;
begin
   if TcxGridDBDataController(Sender).DataModeController.GridMode then
      begin
       sl:=TStringList.Create;
       sl.Delimiter := ',';
       sl.StrictDelimiter :=true;
       for I := 0 to TcxGridDBDataController(Sender).GridView.SortedItemCount - 1 do
          begin
            if TcxGridItemDBDataBinding(TcxGridDBDataController(Sender).GridView.SortedItems[i].DataBinding).Field.FieldKind=fkData then
            sl.Add(TcxGridItemDBDataBinding(TcxGridDBDataController(Sender).GridView.SortedItems[i].DataBinding).FieldName + ' '
                   + C_SORTTYPE[TcxGridDBDataController(Sender).GridView.SortedItems[i].SortOrder])
          end;
       TAdodataset(TcxGridDBDataController(Sender).Datasource.DataSet).Sort
       := sl.DelimitedText;
       sl.Free;
      end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 12:11
Zitat:
Das in kann man sich sparen, man muss die Top Menge nur umdrehen.
Hat Du das mal probiert?
Nein, hab ich nicht, es ist ja Dein Problem
Es macht einfach keinen Sinn das Datum noch mal mit "in" abzugleichen, wenn die Menge selbst schon richtig ist.
Geht es nicht?

Zu den großem Mengen:
Warum muss es unbedingt per TOP gemacht werden?
Wieso lässt Du den Nutzer nicht gleich die untere Datumsgrenze selbst wählen?
Ob es nun TOP 500, TOP 1000 oder TOP 10000 sind, dürfte relativ schnuppe sein.
Als Nutzer würde ich eine konkrete Datumsgrenze ala:
alles von letzter Woche, letztem Monat, letzten 12 Monaten
vermutlich bevorzugen.
Gruß, Jo
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 12:50
'ORDER BY' ist nur dann schnell bzw. dauert gar nicht, wenn auf dem zu sortierenden Feld ein 'clustered index' liegt.

Haben die neueren DevExpress-Teile nicht 'Paging' eingebaut, oder hast Du auch 'nur' das alte?
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#9

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 13:24
TOP:
Wenn das Form startet und ein Datumsbereich angegeben ist, kann es sein, dass die Tabelle leer ist.
Kein schöber Effekt. Der Nutzer muß sich einen Bereich suchen, in dem er Daten findet. Nicht gut.
Besser, er bekommt die letzten eingegebenen Daten zu sehen und kann sich orientieren. Also TOP.
Oder nicht?

Bummi, genau das Template verwende ich auch.

jobo, ich finde, wenn Du Vorschläge machst - danke dafür - solltest Du es auch probiert haben.

Furtbichler, ich habe die 5er, Paging ist aber drin, deshalb geht es sehr schnell bei 50.000 DS, aber nur bei Gridmode. Oder habe ich da was nicht verstanden?

Ich WILL die TOP 20, also nehme ich sie.
Dabei werden je nach Sortierrichtung entweder die vo 2014 oder die von 1936 genommen.
Also isoliere ich die TOP 20 mit IN und kann dann ganz in Ruhe mit arbeiten.
Das läuft schnell und Problemlos, oder gibt's was besseres?
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: SELECT TOP ... DESC umsortieren

  Alt 9. Jan 2014, 14:22
Code:
Select * from
  (SELECT TOP 20 [Datum] FROM tStunden ORDER BY [Date] DESC)
order by [Datum]
Das funktioniert nicht bei jeder Datenbank, Oracle kann's so, SQL-Server (versionsabhängig?) und Access benötigen eine kleine Abwandlung:
Code:
Select * from
  (SELECT TOP 20 [Datum] FROM tStunden ORDER BY [Date] DESC) IrgendEinName
order by [Datum]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz