在 MySQL 中使用 Group By 选择最新值
当尝试使用 MySQL 的 GROUP BY 子句检索每个用户的最新出勤情况时,您可能会遇到返回初始出勤率而不是所需的最新值的情况。
使用子查询
一种解决方案是利用子查询来识别最大时间戳对于每个成员,并将此子查询与主表连接:
<code class="sql">SELECT * FROM view_event_attendance AS t1 WHERE id_event = 782 AND timestamp = (SELECT MAX(timestamp) FROM view_event_attendance AS t2 WHERE t1.id_member = t2.id_member AND t1.id_event = t2.id_event GROUP BY id_event, id_member) GROUP BY id_event, id_member;</code>
使用串联和 MAX()
另一种方法是将时间戳和出勤值连接起来,然后使用 MAX() 选择组合值:
<code class="sql">SELECT substring(max(concat(from_unixtime(timestamp),attendance)) from 20) as attendance FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event,id_member;</code>
此方法仅返回每个成员的最新出勤值。
选择串联时间戳/出勤
如果您想检索连接的时间戳和出勤值,可以使用以下查询:
<code class="sql">SELECT concat(from_unixtime(timestamp),attendance), timestamp, attendance FROM view_event_attendance WHERE id_event = 782 GROUP BY id_event,id_member;</code>
性能注意事项
交易时对于大型数据集,子查询的计算成本可能很高。连接值并使用 MAX() 可以提供更好的性能。但是,评估具体要求和数据库特征以确定适合您的用例的最佳解决方案非常重要。
以上是如何使用 MySQL 的 GROUP BY 子句检索每个用户的最新考勤情况?的详细内容。更多信息请关注PHP中文网其他相关文章!