mysql - 了解MySQL如何获取具有相同用户id的数据

标签 mysql sql join subquery correlated-subquery

我在一张 table 上工作,记录学生参加类(class)的记录。数据使用学生证号码、类(class) ID、类(class)名称、开始日期、结束日期保存。学生可以选修一门以上的类(class),因此会有重复的学生识别号,但类(class) ID、类(class)名称、开始日期和结束日期不同。我在这里尝试的是使用 DATEDIFF 根据天数选择学生。

抱歉没有正确解释我的问题。我正在谈论的表的结构:

studcourse1(internalstudentid, staffnoic, courseid, coursenm, StDt, EndDt, location, organizer, generalcategorycd, generalsubcategorycd, eid)

staffnoic - 员工识别号, StDt - 开始日期。 EndDt - 结束日期

我已经检查过,该表上没有主键或索引,因为它不是基表而是 View 。

抱歉,如果之前的声明太长。让我们用它来代替。

SELECT GradeGroupCd, StudCourse1.StaffNoIC, (DATEDIFF( EndDt, StDt ) +1) TotalDay, StDt, EndDt
          FROM StudCourse1, tblStaff, tblRefTitleGred
          WHERE tblStaff.TitleGredCd = tblRefTitleGred.TitleGredCd
          AND StudCourse1.StaffNoIC = tblStaff.StaffNoIC
          AND StDt >= '2009-1-1' AND YEAR(EndDt) <= YEAR(NOW())
          AND (DATEDIFF( EndDt, StDt ) +1) > 90
          AND (GeneralSubCategoryCd = 'S0012' OR GeneralSubCategoryCd = 'S0014')
          GROUP BY GradeGroupCd, StudCourse1.StaffNoIC

上面的语句使用 (DATEDIFF(EndDt, StDt) + 1) 获取学习类(class)超过 90 天的学生的结果(使用表 tblStaff 和表 StudCourse1 中的 Staffnoic)。真正让我困惑的是,例如来自studcourse1的一条记录,staffnoic为“111111111111”,示例数据:

studcourse1(internalstudentid, staffnoic, courseid, coursenm, StDt, EndDt, location, organizer, generalcategorycd, generalsubcategorycd, eid)
studcourse1(10629,111111111111,AAA1811,Course1,2010-01-01 00:00:00, 2010-12-31 00:00:00, '', ABC Org, G003, S0012, E00001812)
       (30684,111111111111,AAA6968,Course2,2009-02-10 00:00:00, 2012-02-09 00:00:00, '', ABC Org, G003, S0012, E00006894)
       (30685,111111111111,AAA6970,Course3,2011-01-01 00:00:00, 2012-02-09 00:00:00, '', ABC Org, G003, S0014, E00006896)

运行 SQL 语句将选择 StDt 为 2010-01-01 00:00:00 且 EndDt 为 2010-12-31 00:00:00 的一条。为什么它会单独列出该记录而不是其他记录,因为它们都属于 AND St​​Dt >= '2009-1-1' AND YEAR(EndDt) <= YEAR(NOW())"。现在指的是 2012 年. 如何让它选择带有 StDt(2009-02-09) 和 EndDt(2012-02-09) 的那个?

还有“(DATEDIFF( EndDt, StDt ) +1) > 90”,为什么要加1? DATEDIFF( EndDt, StDt ) > 90 不是正确的吗?

抱歉,问题太多了。最近刚学MySQL。感谢您抽出时间。

最佳答案

好吧,很难理解你写的内容。请提供您使用过的表格和结构。

完成此任务的最简单方法是使用 3 个表, 1)学生的学号、姓名等 2) 类(class)-类(class)ID、类(class)名称等。 3) 注册 - 注册 ID、开始日期、结束日期和外键(学生 ID 和类(class) ID)。

我不明白你的意思(我在这里尝试的是使用 DATEDIFF 根据天数选择学生。)

关于mysql - 了解MySQL如何获取具有相同用户id的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9801315/

相关文章:

php - 需要帮助分解 PHP 脚本/超过 max_execution_time

MySQL:用户 'test' @'localhost' 的访问被拒绝(使用密码:YES),root 用户除外

php - Laravel - 使用 Rest API JSON 的原始查询

mysql - INNER JOIN 之前的 WHERE 子句

sql - 连接具有不同连接列名称的两个表

android - 将json数据从本地列表更改为在线文件

sql - 是否可以将选择字段分配给 PostgreSQL 中的变量?

已使用连接表的语句上的 mySQL 行号生成

sql - 调用 pl sql 函数问题

mysql - mysql中子查询join语句的高效写法