从 Table 限制中查找员工参加会议的次数

Find number of times employee attended meeting from Table Limit

我有一个名为 table 的会议,用于管理员工在一系列日期内被标记为出席会议的次数。 Table 只是 e_id 和日期。如果我有 50 个日期 2021-09-30、2021-09-29...,并且在过去 10 次预定会议期间,一名员工在 table 中被标记为出席 7 次,我试图显示有多少次该员工参加了最近 10 次会议以确定趋势。例如,对于上面的示例,我的查询将查找员工 ID 并显示 7。这是行不通的。我可能有错字。 MYSQL 状态 #1054 - 'field list' 中的未知列 'e_id'。任何帮助将不胜感激。

SELECT COUNT(e_id) AS 'Present'
FROM (SELECT DISTINCT Date FROM meetings ORDER BY Date DESC LIMIT 10) a
WHERE e_id = '".$sidw."'

您的子查询语法错误,为了获得您想要的结果,您必须使用不同的 SELECT 作为 WHERE/AND 条件!

   SELECT COUNT(e_id) AS 'Present'
    FROM meetings
    WHERE e_id = '".$sidw."'
    AND Date IN (SELECT DISTINCT Date FROM meetings ORDER BY Date DESC LIMIT 10)

您得到的错误是因为内部查询仅公开日期字段,而不公开 e_id。你可以这样修改:

SELECT COUNT(*) AS 'Present'
FROM (SELECT DISTINCT Date FROM meetings WHERE e_id = '".$sidw."' ORDER BY Date DESC LIMIT 10) a

您将过滤内部查询中的 e_id,然后对内部查询中的任何内容进行计数 returns

您用来获取最后 10 个日期的子查询没有 return 列 e_id,这就是您收到 未知列 错误的原因.

如果你的MySql版本是8.0+可以使用DENSE_RANK()window函数获取最近10个日期的行然后聚合:

SELECT COUNT(*) AS Present
FROM (
  SELECT *, DENSE_RANK() OVER (ORDER BY date DESC) dr 
  FROM meetings 
) t
WHERE e_id = '".$sidw."' AND dr <= 10;

对于以前的版本,使用不同日期的连接:

SELECT COUNT(*) AS Present
FROM (SELECT DISTINCT date FROM meetings ORDER BY Date DESC LIMIT 10) d
INNER JOIN meetings m ON m.date = d.date
WHERE m.e_id = '".$sidw."';