PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

sql wybierz najwcześniejszą datę dla wielu wierszy

select customer_name,
       kwh,
       reading_date, 
       reading_time
from (
   select customer_name,
          kwh,
          reading_time,
          reading_date,
          row_number() over (partition by customer_name order by reading_time) as rn
   from readings
   where reading_date = date '2012-11-17'
) t
where rn = 1

Alternatywnie:

select r1.customer_name,
       r1.kwh, 
       r1.reading_date,
       r1.reading_time
from readings r1
where reading_date = date '2012-11-17'
and reading_time = (select min(r2.reading_time)
                    from readings
                    where r2.customer_name = r1.customer_name
                    and r2.read_date = r1.reading_date);

Ale spodziewałbym się, że pierwszy będzie szybszy.

Btw:dlaczego przechowujesz datę i godzinę w dwóch oddzielnych kolumnach? Czy zdajesz sobie sprawę, że można to lepiej obsłużyć za pomocą timestamp? kolumna?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tablica zagregowana Postgresql

  2. Utwórz tablicę dla wartości z listy kolumn wyodrębnionych w Postgres

  3. Konfigurowanie klucza obcego z innym typem danych

  4. Jak wybrać dane z tabeli podrzędnej w PostgreSQL?

  5. PostgreSQL GeoJSON <- php -> JavaScript