0

我想从下表中检索具有 min (svc_date) 且 status=A 的 car_id 。

预期为 103 和 100,其状态为“A”

因为它具有最小 svc_date 的状态 A

car_id   svc_date            status

100     03/01/2013          A           
100     04/02/2013          B
100     05/03/2013          C 
101     06/01/2013          A
101     05/01/2013          B
102     06/06/2013          A
102     05/05/2013          B 
103     05/25/2013          A

我正在使用 postgres 并且正在尝试

    select   car_id,svc_date,status  from  car_tbl  group by 
car_id having min(svc_date) and status='A'

svc_date 是带有时区的时间戳并出现错误

  argument of AND must be type boolean, not type timestamp with time zone

整个 sql 是错误的还是任何类型转换都会有帮助?

4

2 回答 2

2

真的,你很难理解:

with cte as (
select 
  car_id ,
  status,
  rank() OVER (
     PARTITION BY car_id 
     ORDER BY svc_date )       
from car_tbl
)
select * 
from cte 
where rank = 1 
and status = 'A'

结果

| CAR_ID | STATUS | RANK |
--------------------------
|    100 |      A |    1 |
|    103 |      A |    1 |
于 2013-06-07T19:57:14.957 回答
0

很难看出你真正在问什么。但这是否符合您的要求?

SELECT car_id, status, MIN(svc_date) FROM car_tbl WHERE status = 'A' GROUP BY car_id, status
于 2013-06-07T19:53:50.310 回答