从 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."';
我有一个名为 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."';