sql >> Databáze >  >> RDS >> PostgreSQL

Jak seskupit podle měsíce v PostgreSQL

Problém:

Chcete seskupit záznamy podle měsíce v databázi PostgreSQL.

Příklad:

Naše databáze má tabulku s názvem watch s údaji ve sloupcích id , name a production_timestamp .

id jméno production_timestamp
1 sledovat 2019-03-01 11:45:23
2 chytré hodinky 2019-09-15 07:35:13
3 chytrý pásek 22.09.2019 17:22:05

Řešení:

Můžete použít DATE_TRUNC() funkce k seskupení záznamů v tabulce podle měsíce.

Zde je dotaz, který byste napsali:

SELECT 
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month,
       COUNT(id) AS count 
FROM watch
GROUP BY DATE_TRUNC('month',production_timestamp);

Zde je výsledek dotazu:

production_to_month počet
2019-03-01 00:00:00 1
2019-09-01 00:00:00 2

Diskuse:

Použijte DATE_TRUNC() Pokud chcete získat datum nebo čas se specifickou přesností z databáze PostgreSQL. (V našem příkladu jsme použili měsíční přesnost.)

Tato funkce má dva argumenty. Nejprve máme specifikátor části data (v našem příkladu 'měsíc'). Všimněte si, že specifikátor je řetězec a musí být uzavřen v uvozovkách.

Druhý argument je hodnota časového razítka; může to být výraz vracející hodnotu časového razítka nebo název sloupce časového razítka. (V našem příkladu používáme sloupec production_timestamp ).

Funkce DATE_TRUNC() zkrátí časové razítko na danou přesnost (v tomto případě na měsíc). V naší databázi chytré hodinky má datum výroby 2019-09-15 07:35:13; po zkrácení na měsíční přesnost se změní na 2019-09-01 00:00:00 . Přesnost na úrovni měsíce způsobí, že se den zobrazí jako „01“ a čas se vyplní nulami. (Zkrácené části data (např. dny, měsíce) časového razítka jsou nahrazeny jedničkami.)

Seskupování záznamů podle měsíců je v PostgreSQL velmi běžné. V našem příkladu je celkový počet produktů za každý měsíc. (COUNT() agregační funkce počítá počet produktů). Pokud seskupujete záznamy pomocí agregační funkce, musíte použít klauzuli GROUP BY. Za klauzuli GROUP BY byste měli umístit sloupce nebo výrazy používané s agregační funkcí do příkazu SELECT. (V našem příkladu je to DATE_TRUNC( 'month', production_timestamp) .)

Samozřejmě nemusíte používat DATE_TRUNC() fungovat pouze pro seskupování záznamů. Můžete jej také použít k získání prvního dne v měsíci pro dané datum.

U každých hodinek získejte přesnost názvu a data výroby na měsíc – není potřeba seskupování. Zde je dotaz, který byste napsali:

SELECT name,
       DATE_TRUNC('month',production_timestamp)
         AS  production_to_month
FROM watch;

Zde je výsledek:

name production_to_month
sledovat 2019-03-01 00:00:00
chytré hodinky 2019-09-01 00:00:00
chytrý pásek 2019-09-01 00:00:00

V tomto dotazu funkce DATE_TRUNC() zkrátí časové razítko na měsíční přesnost. V naší databázi chytré hodinky má datum výroby '2019-09-15 07:35:13'; nyní je '2019-09-01 00:00:00' , což je první den v měsíci.


  1. Jak extrahovat podřetězec z řetězce v Oracle/SQLite

  2. Jaký je účel projekční mapy pro Android u poskytovatele obsahu?

  3. Monitor změn tabulek Oracle

  4. ORA-01097