sql - SQL - 根据其他变量获取第 N 行
问题描述
所以我试图让每个司机完成第 N 个trip_id(每次旅行唯一)。例如,每个 driver_id (每个驱动程序唯一)的第三次完成行程,我的数据库表如下所示:
id datetime driver_id trip_id trip_status
---|------------|----------|---------|--------------|
1 | 03/03/2009 | 1111 | 1 | completed |
2 | 04/03/2009 | 1111 | 2 | cancelled |
3 | 05/03/2009 | 2222 | 1 | completed |
4 | 05/03/2009 | 2222 | 2 | completed |
5 | 06/03/2009 | 2222 | 2 | cancelled |
6 | 06/03/2009 | 2222 | 4 | completed |
7 | 06/03/2009 | 3333 | 1 | completed |
8 | 06/03/2009 | 3333 | 2 | completed |
9 | 06/03/2009 | 3333 | 3 | completed |
并希望我的结果是这样的:
id datetime driver_id trip_id trip_status
---|------------|----------|---------|--------------|
6 | 06/03/2009 | 2222 | 4 | completed |
9 | 06/03/2009 | 3333 | 3 | completed |
解决方案
您可以使用row_number()
窗口函数获取按datetime
分区排序的记录的行号driver_id
。
SELECT id,
...
trip_status
FROM (SELECT id,
...
trip_status,
row_number() OVER (PARTITION BY driver_id
ORDER BY datetime) rn
FROM elbat
WHERE trip_status = 'completed')
WHERE rn = 3;
推荐阅读
- django - docker-machine rm 后,Docker 机器的数据库仍然存在 如何删除数据库?
- python - Python命名空间子包依赖另一个子包安装失败
- java - 如何从 Selenium Web Driver 中的无序列表中选择特定的列表项
- c++ - Dsi Homebrew 从 sdcard 加载 bmp
- reverse-proxy - 为什么使用反向代理访问 MongoDB Atlas 数据库
- angularjs - 如何基于angularjs中的其他单选按钮启用单选按钮
- javascript - 通过 Javascript 生成随机链接进行在线调查
- python - 当列表值与 Pyspark 数据框中列值的子字符串匹配时填充新列
- python - 如何处理 Python 或 Django 中的错误“预期的 str、字节或 os.PathLike 对象,而不是 InMemoryUploadedFile”?
- elasticsearch - Elasticsearch 在搜索期间为字段起别名