首页 > 解决方案 > 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

标签: sqlms-access

解决方案


请试试这个。

用于 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

推荐阅读