postgresql - 最大值和最小值的时间戳
问题描述
我有一个下表:
id | product_id | price | timestamp
---------+------------+-------+----------------------------
1263479 | 1 | 1100 | 2019-01-21 21:08:30.617791
272859 | 1 | 1100 | 2018-12-01 11:31:40.746908
139210 | 2 | 1100 | 2018-11-13 14:24:19.775732
193796 | 2 | 880 | 2018-11-23 13:17:20.820132
请问如何在一个查询中选择 min(price) 及其时间戳、max(price) 及其时间戳?
解决方案
您可以使用ROW_NUMBER
两次:
WITH cte AS (
SELECT id, product_id, price, timestamp,
ROW_NUMBER() OVER (ORDER BY price) rn_min,
ROW_NUMBER() OVER (ORDER BY price DESC) rn_max
FROM yourTable
)
SELECT 'min' AS label, price, timestamp FROM cte WHERE rn_min = 1
UNION ALL
SELECT 'max', price, timestamp FROM cte WHERE rn_max = 1;
如果您不想要min
andmax
标签(价格本身给出了哪个是最小值,哪个是最大值),那么您可以使用这个:
SELECT price, timestamp FROM cte WHERE rn_min = 1 OR rn_max = 1;
推荐阅读
- c++ - 为什么 C++17 中基于范围的“for”循环规范发生了变化?
- python-3.x - RuntimeError:使用深度马尔可夫模型时键入“元组”
- sql - 修剪访问列的字符串中的所有额外空格
- javascript - 在 GO 中通过 http 请求检索网站 DOM
- php - $_SERVER['DOCUMENT_ROOT'] 在重写规则后返回不同的值
- sql - 查询获取不包含任何项目集合的行
- r - 如何使mapdeck中的色阶静态
- visual-studio-2017 - 需要有关使用和发布 rdlc 文件的帮助
- sql - Sqlite 中的 IF ELSE 解决方法
- python - 在一个笔记本中使用 tensorflow 和 numpy 时:内核似乎已经死了。它会自动重启