在PostgreSQL中选择带有DISTINCT的列

sam*_*tte 6 postgresql activerecord ruby-on-rails

我正在从数据库查询公交车站,我希望每个公交线路/方向只返回1站.这个查询只是这样:

Stop.select("DISTINCT line_id, direction")
Run Code Online (Sandbox Code Playgroud)

除了它不会给我任何其他属性而不是那些2.我尝试了几个其他查询让它返回id除了line_iddirection字段(理想情况下它将返回所有列),没有运气:

Stop.select("DISTINCT line_id, direction, id")
Run Code Online (Sandbox Code Playgroud)

Stop.select("DISTINCT(line_id || '-' || direction), id")
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,查询都会丢失其distinct子句,并返回所有行.

一些很棒的家伙帮助我,并建议使用子查询让它返回所有的ID:

Stop.find_by_sql("SELECT DISTINCT a1.line_id, a1.direction, (SELECT a2.id from stops a2 where a2.line_id = a1.line_id AND a2.direction = a1.direction ORDER BY a2.id ASC LIMIT 1) as id FROM stops a1
Run Code Online (Sandbox Code Playgroud)

然后,我可以提取所有ID并执行第二个查询以获取每个停靠点的完整属性.

有没有办法在1个查询中拥有它并让它返回所有属性?

Pie*_*ult 27

Stop.select("DISTINCT ON (line_id, direction) *")
Run Code Online (Sandbox Code Playgroud)