繁体   English   中英

如何找到同一组连续行之间的差异?

[英]How to find a difference between consecutive rows of a same group?

这个问题在 Facebook 采访中被问到:

(1) 有两张桌子

  • 出席人数:日期 | student_id | 出勤率
  • 学生:student_id | school_id | Grade_level | 出生日期 | 家乡

使用这些数据,您能否回答以下问题:

  • 从昨天到今天,哪个年级的出勤率下降幅度最大?

到目前为止,我已经得到了这个,但我被卡住了。 你能帮助我吗? 谢谢。

(SELECT grade_level, date, COUNT(attendance) AS att FROM attendances AS A
     LEFT JOIN students AS S
     ON A.student_id = S.student_id
     GROUP BY grade_level, date
     HAVING attendance == "yes"
     AND (date == "02-06-2020" OR date == "02-05-2020")
     ORDER BY grade_level, date DESC) AS t

您可以加入表,进行条件聚合,然后排序和限制:

select
    s.grade_level
    sum(a.attendance * case when a.date = date('now') then 1 else -1 end) attendance_drop
from attendances a
inner join students s on s.student_id = a.student_id
where a.date in (date('now'), date('now', '-1 day'))
group by s.grade_level
order by attendance_drop desc
limit 1

请尝试使用下面的脚本认为它工作正常。

SELECT TOP 1 s.grade_level, COUNT(a.attendance) AS dropCount 
FROM students  AS s
INNER JOIN attendances AS a ON  a.student_id = s.student_id
WHERE 
    a.attendance = 'no'
    AND (a.date <= DATEADD(DAY,-1, CAST(GETDATE() AS DATE)) AND a.date >= CAST(GETDATE() AS DATE))
GROUP BY s.grade_level
ORDER BY dropCount DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM