sql >> Databáze >  >> RDS >> Mysql

Otázka osvědčeného postupu pro MySQL:seřadit podle ID nebo data?

Pokud existuje šanci, že získáte dva přidané se stejným datem, budete pravděpodobně potřebovat:

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

(všimněte si klauzule 'sestupná' v obou polích).

Budete však muset vzít v úvahu, co chcete, aby se stalo, když někdo přidá opravný záznam 2. února, kterému je přiřazeno datum 31. ledna, aby byl měsíc leden dokončen. Bude mít ID větší než ty, které byly vytvořeny 1. února.

Obecně platí, že účetní systémy fungují pouze k datu. Možná kdybyste nám řekli proč pořadí je důležité, mohli bychom navrhnout další.

V reakci na váš komentář:

Dal bych pár rad - to je vše, co mě okamžitě napadlo, obvykle chrlím mnohem více "rad" s ještě menším povzbuzením :-) První dvě, více související s databází než účetnictvím, jsou:

Nejprve udělejte vše ve třetí normální formě a vrátit se pouze tehdy, když máte problémy s výkonem. To vám ušetří spoustu úzkosti s duplicitními daty, která mohou vyjít z kroku. I když se vrátíte, použijte spouštěče a další funkce DBMS, abyste zajistili, že data nebudou přecházet mimo krok.

Chcete-li například urychlit vyhledávání ve sloupci last_name, můžete vytvořit sloupec upper_last_name (indexovaný) a pak jej použít k vyhledání záznamů odpovídajících již hledanému výrazu s velkými písmeny. To bude téměř vždy rychlejší než funkce na řádku upper(last_name) . Můžete použít spouštěč pro vložení/aktualizaci, abyste zajistili, že horní_příjmení je vždy nastaveno správně, což znamená náklady pouze při změně jména, nikoli při každém vyhledávání.

Za druhé, neduplikujte data ani v tabulkách (jako je vaše aktuální schéma), pokud nemůžete použít stejné triky typu spouště, abyste zaručili, že se data nedostanou mimo krok. Co udělá váš zákazník, když mu pošlete fakturu, jejíž konečný zůstatek nebude odpovídat počátečnímu zůstatku plus nákupy? Vaše společnost tak nebude vypadat příliš profesionálně :-)

Zatřetí (a to se týká spíše účetnictví), obecně se nemusíte starat o počet transakcí při výpočtu zůstatků za chodu. Je to proto, že účetní systémy obvykle mají na konci roku funkci roll-over, která resetuje počáteční zůstatky.

Takže obvykle nikdy nebudete muset zpracovávat více než rok dat najednou, což, pokud nejste vláda USA nebo Microsoft, není tak náročné.



  1. Naplnit JFreechart TimeSeriesCollection z Mysql DB?

  2. Jak mohu určit nainstalované instance SQL Server a jejich verze?

  3. Jak ukončím skript v SQLPlus, když dojde k chybě, a vrátím se na výzvu SQLPlus, aniž bych musel SQLPlus odpojit nebo ukončit?

  4. Vytvořte datum z polí den, měsíc, rok v MySQL