mysql - 当 ID 列不同时,在 SQL 中选择最近的重复项
问题描述
好吧,假设我有如下数据:
ID GROUP TIMESTAMP col_OTHER
001 AA 2021-04-02 15:02:33.319 mangos
002 BB 2021-04-01 05:56:35.334 kiwis
004 AA 2021-04-02 03:51:35.279 oranges
003 DD 2021-04-01 18:24:23.469 oranges
003 DD 2021-04-02 12:16:21.539 bananas
002 CC 2021-04-02 11:02:51.313 apples
所以我真正想做的就是使用 SQL 来操作它,以便在有多个 ID 时为 DF 提供最新日期。
完成品:
ID GROUP TIMESTAMP col_OTHER
001 AA 2021-04-02 15:02:33.319 mangos
004 AA 2021-04-02 03:51:35.279 oranges
003 DD 2021-04-02 12:16:21.539 bananas
002 CC 2021-04-02 11:02:51.313 apples
我的主管建议我按 ID 和组进行分区,然后选择最大值(时间戳),以便我们保留最新的组。但是 PARTITION() 甚至是必要的吗???也许他想保留网站用户的数量,但也只选择上面的那些。
解决方案
您还可以使用窗口函数 RANK()
PARTITION 定义了获得递增数字的行组。
没有它,您将获得 **all++ 行的序列号,因此无法仅获得第一个或第二个或您想要的数字
CREATE TABLE table1 ( `ID` VARCHAR(4), `GROUP` VARCHAR(2), `TIMESTAMP` TIMESTAMP, `col_OTHER` VARCHAR(7) ); INSERT INTO table1 (`ID`, `GROUP`, `TIMESTAMP`, `col_OTHER`) VALUES ('001', 'AA', '2021-04-02 15:02:33.319', 'mangos'), ('002', 'BB', '2021-04-01 05:56:35.334', 'kiwis'), ('004', 'AA', '2021-04-02 03:51:35.279', 'oranges'), ('003', 'DD', '2021-04-01 18:24:23.469', 'oranges'), ('003', 'DD', '2021-04-02 12:16:21.539', 'bananas'), ('002', 'CC', '2021-04-02 11:02:51.313', 'apples');
sELECT `ID`, `GROUP`, `TIMESTAMP`, `col_OTHER` FROM ( SELECT *, RANK() OVER ( PARTITION BY ID ORDER BY `TIMESTAMP` DESC) rnk FROM table1) t1 WHERE rnk = 1
身份证 | 集团 | 时间戳 | col_OTHER :-- | :---- | :----------------- | :-------- 001 | 机管局 | 2021-04-02 15:02:33 | 芒果 002 | 抄送 | 2021-04-02 11:02:51 | 苹果 003 | DD | 2021-04-02 12:16:22 | 香蕉 004 | 机管局 | 2021-04-02 03:51:35 | 橘子
db<>在这里摆弄
推荐阅读
- python - “只能从 Matlab 5 级 MAT 文件中读取”
- python - 通过 VBA 从不同的计算机运行 Python 脚本
- php - PHP - Preg 匹配所有 - Wordpress 多个带有多个参数的短代码
- postgresql - 如何将所有 autovacuum 设置恢复为其 postgres 默认值
- java - spring-cloud rabbit mq 现有队列
- xamarin.forms - .NET MAUI:MAUI 将如何影响 Xamarin Native 应用程序?
- selenium-grid - 线程“Thread-13”org.openqa.selenium.remote.UnreachableBrowserException 中的异常:无法启动新会话
- ruby-on-rails - CircleCI Docker - 构建路径 /home/circleci/myapp_api 不存在、不可访问或不是有效的 URL
- javascript - Vue.js 意外数据和方法行为
- corda - Corda - 通过 RPC 传递匿名实现