sql - Microsoft Access 使用 ROW_NUMBER 的替代方法查询重复日期
问题描述
显然,在 MS Access 中有很多问题ROW_NUMBER
,通常的回答是它不存在,而是使用 COUNT(*) 来创建类似的东西。不幸的是,这样做并没有给我我需要的结果。
我的数据看起来像:
employee_id -------start_time ------- start_date
000670 -----------------12:30 ------------ 2019/03/28
000670 -----------------11:22 ------------ 2019/03/30
000676 -----------------13:00 ------------ 2019/03/28
000676 -----------------11:30 ------------ 2019/03/29
000676 -----------------14:00 ------------ 2019/03/29
000676 -----------------11:20 ------------ 2019/03/30
000676 -----------------14:00 ------------ 2019/03/30
000676 -----------------11:00 ------------ 2019/03/31
000677 -----------------11:20 ------------ 2019/03/28
000677 -----------------12:20 ------------ 2019/03/29
000678 -----------------12:00 ------------ 2019/03/29
使用COUNT(*)
我得到:
employee_id -------- start_date ------- seq
000670 ------------ 2019/03/28 ------- 1
000670 ------------ 2019/03/30 ------- 2
000676 ------------ 2019/03/28 ------- 1
000676 ------------ 2019/03/29 ------- 3
000676 ------------ 2019/03/29 ------- 3
000676 ------------ 2019/03/30 ------- 5
000676 ------------ 2019/03/30 ------- 5
000676 ------------ 2019/03/31 ------- 6
000677 ------------ 2019/03/28 ------- 1
000677 ------------ 2019/03/29 ------- 2
000678 ------------ 2019/03/29 ------- 1
我目前的查询是:
SELECT tbl.employee_id
, tbl.start_date
, ( SELECT COUNT(*)
FROM tbl AS tbl2
WHERE tbl2.employee_id = tbl.employee_id
AND tbl2.start_date <= tbl.start_date ) AS seq
FROM tbl
ORDER BY tbl.employee_id, tbl.start_date
我想要得到的是对 employee_id 和 start_date 的唯一计数,因此我的查询输出如下所示:
employee_id -------- start_date ------- seq
000670 ------------ 2019/03/28 ------- 1
000670 ------------ 2019/03/30 ------- 2
000676 ------------ 2019/03/28 ------- 1
000676 ------------ 2019/03/29 ------- 2
000676 ------------ 2019/03/29 ------- 3
000676 ------------ 2019/03/30 ------- 4
000676 ------------ 2019/03/30 ------- 5
000676 ------------ 2019/03/31 ------- 6
000677 ------------ 2019/03/28 ------- 1
000677 ------------ 2019/03/29 ------- 2
000678 ------------ 2019/03/29 ------- 1
解决方案
请试试这个。
用于 SQL
SELECT
tbl.employee_id, tbl.start_date,
ROW_NUMBER() OVER(PARTITION BY employee_id ORDER BY employee_id)As Row_Num
FROM tbl
对于 MS 访问
SELECT tbl.employee_id
, tbl.start_date
, ( SELECT COUNT(*)
FROM tbl AS tbl2
WHERE tbl2.employee_id = tbl.employee_id
AND tbl2.start_date+tbl2.start_time < tbl.start_date+tbl.start_time
)+1 AS seq
FROM tbl
推荐阅读
- sql - 将SQL单行多列输出转换为两列(key, value)多行输出
- javascript - 如何使用 Laravel 处理 select2 倍数
- javascript - 通知用户有关 JavaScript 中的跨域重定向
- javascript - 进度条加载后加载页面
- javascript - 在 Top Tab Navigator 中自定义或修改 renderIndicator
- javascript - 如何在Vue cli中的浏览器后退按钮上进行分页和内容呈现?
- oracle - 使用 pl/sql 或 sql 将数据拆分到学生表中的多个列
- clang-format - 尽可能保持参数/参数在同一行
- php - 如何检查我的工作是否在分派后调用了句柄方法?
- spring-boot - redis:使用来自多个服务实例的 zset 中的元素