sql >> Database teknologi >  >> RDS >> Mysql

Spørgsmål om bedste praksis til MySQL:Bestil efter id eller dato?

Hvis der er en chance for at du får tilføjet to med samme dato, har du sandsynligvis brug for:

SELECT balance FROM my_table ORDER BY date_added DESC,id DESC LIMIT 1;

(bemærk 'faldende'-sætningen på begge felter).

Du bliver dog nødt til at tage højde for, hvad du ønsker, der skal ske, når nogen tilføjer en justering af den 2. februar, som har datoen 31. januar for at sikre, at januar måned er fuldendt. Den vil have et ID, der er større end dem, der blev lavet den 1. februar.

Generelt fungerer regnskabssystemer bare på datoen. Måske hvis du kunne fortælle os hvorfor rækkefølgen er vigtig, vi kunne komme med andre forslag.

Som svar på din kommentar:

Jeg vil give et par råd - det er alt, jeg umiddelbart kunne komme i tanke om, jeg plejer at udslynge meget flere "råd" med endnu mindre opmuntring :-) De to første, mere database-relaterede end regnskabsmæssige, er:

Gør først alt i tredje normal form og kun vende tilbage, hvis og når du har præstationsproblemer. Dette vil spare dig for en masse angst med duplikerede data, som kan komme ud af trit. Selvom du vender tilbage, skal du bruge triggere og andre DBMS-funktioner for at sikre, at data ikke kommer ud af trit.

For eksempel, hvis du vil fremskynde dine søgninger på en efternavn-kolonne, kan du oprette en øvre_efternavn-kolonne (indekseret) og derefter bruge den til at finde poster, der matcher dit søgeudtryk med store bogstaver. Dette vil næsten altid være hurtigere end funktionen pr. række upper(last_name) . Du kan bruge en insert/update trigger for at sikre, at upper_last_name altid er indstillet korrekt, og dette medfører kun omkostningerne, når navnet ændres, ikke hver gang du søger.

For det andet skal du ikke duplikere data selv på tværs af tabeller (som dit nuværende skema), medmindre du kan bruge de samme trigger-type tricks for at sikre, at dataene ikke kommer ud af trit. Hvad vil din kunde gøre, når du sender dem en faktura, hvor den endelige saldo ikke svarer til startsaldoen plus køb? Det kommer ikke til at få din virksomhed til at se særlig professionel ud :-)

For det tredje (og dette er mere regnskabsrelateret), behøver du generelt ikke bekymre dig om antallet af transaktioner, når du beregner saldi i farten. Det skyldes, at regnskabssystemer normalt har en roll-over-funktion ved årets udgang, som nulstiller åbningssaldierne.

Så du behøver normalt aldrig behandle mere end et års data på én gang, hvilket, medmindre du er den amerikanske regering eller Microsoft, ikke er så besværligt.



  1. Det er i detaljerne

  2. Sådan gemmer du historiske poster i en historietabel i SQL Server

  3. Brug af INSERT INTO fra SQL Server til at ændre Salesforce-data

  4. på dublet nøgleopdatering med en betingelse?