繁体   English   中英

根据最大日期时间戳选择列

[英]Select column based on max date timestamp

我试图选择具有max(date_added)的行,仅考虑col_a和col_b中的重复值,而log_id是唯一的。 我已经看到了DISTINCT ON和使用窗口函数的解决方案,但是我无法正确获取语法以获取所需的结果。

从此表:

+--------+-------+-------+-------+-------+-------+-------------------------+
| log_id | col_a | col_b | col_c | col_d | col_e |       date_added        |
+--------+-------+-------+-------+-------+-------+-------------------------+
|      1 | ACME  | West  |    14 |    27 | A     | 2016-01-01 12:45:00.453 |
|      2 | ACME  | West  |    17 |    31 | A     | 2016-01-02 07:33:24.551 |
|      3 | ACME  | East  |    13 |    27 | B     | 2016-01-01 11:43:21.223 |
|      4 | ACME  | East  |    17 |    28 | A     | 2016-01-03 09:15:50.113 |
+--------+-------+-------+-------+-------+-------+-------------------------+

我该如何退货:

+--------+-------+-------+-------+-------+-------+-------------------------+
| log_id | col_a | col_b | col_c | col_d | col_e |       date_added        |
+--------+-------+-------+-------+-------+-------+-------------------------+
|      2 | ACME  | West  |    17 |    31 | A     | 2016-01-02 07:33:24.551 |
|      4 | ACME  | East  |    17 |    28 | A     | 2016-01-03 09:15:50.113 |
+--------+-------+-------+-------+-------+-------+-------------------------+

一种方法是使用窗口函数...类似...

with cte as (SELECTlog_id,col_a,col_b,col_c,col_d, col_e, date_added,
                    row_number() over (partition by col_A, col_B order by date_added desc) rn
             FROM tableName )
SELECT log_id,col_a,col_b,col_c,col_d,col_e,date_added 
FROM cte 
WHERE rn = 1;

这样做是按照添加日期的降序为col_A和col_B的每个分组分配一个行号(将每个A,b组的行号重置为1),然后仅返回行号为1的那些记录(具有最长日期)

或在窗口函数之前...我们在每个col_a和Col_B组中获取了一组最大日期的数据,然后重新加入基本集以限制数据。

Select A.* 
FROM TableName A
INNER JOIN (SELECT max(date_added) mda, col_A, col_B
            FROM tableName) B
 on B.MDA = A.Date_Added
and B.Col_A = A.Col_A
and B.Col_B = A.Col_B

distinct on上面使用distinct on很简单:

select distinct on (col_a, col_b)
  *
from
  yourtable
order by
  col_a, col_b, -- columns from `distinct on` should be in the `order by` clause
  -- and here is a max value of date_added for every distinct (col_a, col_b) pairs 
  -- because of descending order
  date_added desc;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM