sql - 如何使用 rownum 显示给定表的第一行和最后一行而不使用 union 子句

标签 sql oracle aggregate-functions

示例输入

Name | Value | Timestamp
-----|-------|-----------------
One  | 1     | 2016-01-01 02:00
Two  | 3     | 2016-01-01 03:00
One  | 2     | 2016-01-02 02:00
Two  | 4     | 2016-01-03 04:00

所需输出

<表类=“s-表”> <标题> 姓名 值 最早时间戳 最新时间戳 <正文> 一个 2 2016-01-01 02:00 2016-01-02 02:00 两个 4 2016-01-01 03:00 2016-01-03 04:00

而不是使用 union 子句来显示第一行和最后一行。我们如何显示它?

SELECT * FROM TABLE 
WHERE ROWNUM = 1
UNION ALL
SELECT * FROM TABLE 
WHERE ROWNUM IN (SELECT MAX(ROWNUM) FROM TABLE);

请告诉我这个问题的解决方案。提前致谢。

最佳答案

您似乎在描述聚合:

select name, max(value), min(timestamp), max(timestamp)
from t
group by name;

您的问题表明您可能需要最新值而不是最大值。如果是这样,请使用first聚合函数:

select name,
       max(value) keep (dense_rank first order by timestamp desc),
       min(timestamp), max(timestamp)
from t
group by name;

第一个的文档:https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/FIRST.html#GUID-85AB9246-0E0A-44A1-A7E6-4E57502E9238

关于sql - 如何使用 rownum 显示给定表的第一行和最后一行而不使用 union 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65667106/

相关文章:

oracle - 如何查询Oracle目录的权限?

sql - Postgres array_agg 一行中新字符串的每个值

json - 如何计算 Postgres JSON 数组中的整体百分比?

python - 如何使用 DjangoORM 在 PostgreSQL 9.6 中使用 StringAgg 聚合函数

c# - SQL 和 C# 中的多个条件参数

sql - mysql group by date with multiple join

sql - 将 DataTable 传递给存储过程。有没有更好的办法?

sql - SQL Compact中的种子身份标识列

sql - pl/sql中有BEFORE SELECT触发器吗?

java - 查询被触发但插入未反射(reflect)在数据库中