这是我在PostgreSQL中的查询:
SELECT
"axapta_calls".id,
"axapta_calls".call_time,
calls.calltime,
"calls"."id" as "call_id",
abs(extract(epoch from (axapta_calls.call_time::timestamp - calls.calltime::timestamp))) as ab
FROM
"axapta_calls"
inner join
"calls" (ON
axapta_calls.converted_outer_phone=calls.caller_phone
and abs(extract(epoch from (axapta_calls.call_time::timestamp - calls.calltime::timestamp)))<= 600 )
WHERE ("axapta_calls"."id" > 0)
GROUP BY "axapta_calls"."id", "calls"."id"
结果是:
如何只获得一个最小“ab”值的行?
我将此查询更改为:
SELECT
distinct on (axapta_calls.id)
"axapta_calls".id,
"axapta_calls".call_time,
calls.calltime,
"calls"."id" as "call_id",
abs(extract(epoch from (axapta_calls.call_time::timestamp - calls.calltime::timestamp))) as ab
FROM
"axapta_calls"
inner join
"calls" ON
axapta_calls.converted_outer_phone=calls.caller_phone
and abs(extract(epoch from (axapta_calls.call_time::timestamp - calls.calltime::timestamp)))<= 600
WHERE ("axapta_calls"."id" > 0)
GROUP BY "axapta_calls"."id", "calls"."id"
但得到第二行ab = 347.783 . 我做错了什么?
2 回答
您也可以使用分析功能:
你错过了
ORDER BY
条款 . 您应首先通过id
,然后通过ab
列进行排序 . 然后,Postgres将为每个id
返回一个对应于最低ab
值的记录 .