【问题标题】:Subtract the values of one column for records coming from two different selections that are not necessarily the same减去来自两个不一定相同的不同选择的记录的一列的值
【发布时间】:2020-09-17 19:35:28
【问题描述】:

以下是问题的简单陈述:

假设我们发出了一个 SELECT 查询,它输出了如下内容:

student_id |  course_id  | status_id | created_at
     1            1            1       some_date1
     2            1            1       some_date2
     6            2            1       some_date3

在同一张表上的另一个 SELECT 查询已经超过了这样的内容:

student_id |  course_id  | status_id |     created_at
     1            1            3       some_other_date1
     2            1            2       some_other_date2
     4            3            2       some_other_date3

所以,这两个表实际上都是临时表。

我想要一个接受两个选择的 SQL 查询(我正在使用 MySQL),只考虑基于 student_id 和 course_id 的两个选择之间的共同点,并输出 student_id、course_id 和每条记录的 created_at 值之间的时间差。

感谢任何帮助。甚至对我不知道的一些 SQL 功能的线索表示赞赏。

【问题讨论】:

  • 您的每个查询是否在行集中提供(student_id, course_id) 唯一性?
  • @Akina 是的,这听起来是个不错的解决方案。是的,我相信(student_id, course_id) 在每个表中唯一确定一行。

标签: mysql sql


【解决方案1】:
SELECT student_id, course_id, DATEDIFF(t1.created_at, t2.created_at) difference
FROM (
       SELECT student_id, course_id, /* status_id, */ created_at
       FROM /* the rest of query 1 */ 
     ) AS t1
JOIN (
       SELECT student_id, course_id, /* status_id, */ created_at
       FROM /* the rest of query 2 */ 
     ) AS t2 USING (student_id, course_id)

【讨论】:

  • 在 DATEDIFF() 之后应该是“差异”吗? DATEDIFF() 是否以秒为单位返回两个日期之间的差异?
  • @stressedout DATEDIFF() 是否以秒为单位返回两个日期之间的差异? 不,以天为单位。如果您需要以秒为单位的差异,请使用TIMESTAMPDIFF(SECOND, t1.created_at, t2.created_at)。当然,您可以轻松地使用另一个时间段单位。 PS。日期之间的秒数差异,而不是日期时间/时间戳,是否有意义?
  • 您的解决方案对我来说似乎是正确的,而且总体上说得通。但我仍在脑海中处理它。你为什么要注释掉 status_id 然后在最后使用 USING ?不注释掉会不会遇到麻烦?
  • @stressedout 你为什么要注释掉 status_id 它不在外部查询中使用 - 所以它的选择没有意义。 在末尾使用 USING? 这是连接条件语法的一种变体,但不是 ON,而是在未指定表别名时在输出/表达式中提供列的一个副本,而 ON 将给出“模糊名称”错误。 如果我不注释掉它会不会遇到麻烦?不会。你只会增加服务器的工作量和所需的内存量 - 没有任何利润。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2021-04-19
  • 2023-01-09
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多