【问题标题】:Union of selects within a loop with postgresql使用 postgresql 循环内的选择联合
【发布时间】:2015-02-19 15:37:32
【问题描述】:

我有一张这样的桌子

--------------------
| color |   date   |
--------------------
| red   | 01/01/10 |
| blue  | 01/07/10 |
| ...              |

我想选择每种类型的最大日期。简单的方法(真的)性能很差。即:

   SELECT color, MAX(date) 
     FROM myTable
    WHERE color = ANY(ARRAY('red', 'blue'))
 GROUP BY date;

以下查询有什么好的表现。我认为这是因为日期索引。

    SELECT color, date
      FROM myTable
     WHERE color='red'
  ORDER BY date
     LIMIT 1

问题是我没有相同的结果。我想找到一种方法来使用第二个版本来获得与第一个查询相同的结果。

也许我可以使用循环并选择每个结果的并集。这甚至可能吗?

欢迎任何其他想法?

【问题讨论】:

  • 您的索引是什么样的?您需要聚合才能获得相同的效果
  • 另外,IN(ARRAY('red', 'blue') 有多个严重问题,请更新您的问题以包含您的真实问题。

标签: sql postgresql


【解决方案1】:

为什么需要数组关键字?这不符合您对第一个查询的要求吗?

SELECT date, MAX(color) 
FROM myTable
WHERE color IN ('red', 'blue')
GROUP BY date;

但你似乎想要:

select color, max(date)
from mytable
group by color;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多