首页 > 解决方案 > SQL Server - 选择用户最频繁记录的列的值

问题描述

我有 1 个名为 的表day_shift,其中包含列employee_idshop_iddate

我需要为我的数据库表创建 SELECT 查询以获取shop_id每个employee_id按最高数量的date-records 排序的查询。主要思想: 员工可以在任何商店工作,程序按订单添加白班shop_id日期,但员工将被分配到出现频率更高的部门。

仅给出表中第一条记录的实际查询employee_id

SELECT TOP 1 shop_id FROM day_shift WHERE employee_id = ?1 ORDER BY date desc

如何获得用户shop_id最频繁的相等记录date

[编辑 1]:表也包含列id,但我不在查询中使用它。

标签: sqlsql-server

解决方案


获取按最高日期记录排序的每个employee_id 的shop_id。

我认为您正在使用 SQL Server。无论如何,基于您的查询语法,您将使用:

SELECT TOP (1) WITH TIES employee_id, shop_id, date, COUNT(*)
FROM day_shift
GROUP BY employee_id, shop_id, date
ORDER BY ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY COUNT(*) DESC);

如果您只想为一名员工提供此服务:

SELECT TOP (1) employee_id, shop_id, date, COUNT(*)
FROM day_shift
WHERE employee_id = ?
GROUP BY employee_id, shop_id, date
ORDER BY COUNT(*) DESC;

推荐阅读