PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

sql изберете най-ранната дата за множество редове

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

Като алтернатива:

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);

Но бих очаквал първият да е по-бърз.

Btw:защо съхранявате дата и час в две отделни колони? Знаете ли, че това може да се справи по-добре с timestamp колона?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ГРЕШКА:не може да се регистрира файл XX.csv:Неизвестна грешка

  2. Как да зададете път на възел за nodejs (Ubuntu)

  3. Какъв тип клеймо за дата да избера в PostgreSQL база данни?

  4. Как да генерирам множество времеви серии в една sql заявка?

  5. Postgresql ORDER BY интервали