sql >> Databasteknik >  >> RDS >> PostgreSQL

sql välj tidigaste datum för flera rader

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

Som ett alternativ:

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

Men jag förväntar mig att den första är snabbare.

Btw:varför lagrar du datum och tid i två separata kolumner? Är du medveten om att detta skulle kunna hanteras bättre med en timestamp kolumn?



  1. MySQL ISNULL() Förklarat

  2. Upprepade MySQL-frågor från Python returnerar samma data

  3. Välj tidigaste datum och tid från listan över distinkta användarsessioner

  4. JPA 2.1 StoredProcedureQuery med PostgreSQL och REF_CURSORs