【发布时间】:2017-10-23 15:20:45
【问题描述】:
我有一个带有timeslot 列(日期时间类型)的表。我想发出一个查询并让它返回如下数据:
Sunday | 24
Monday | 32
Tuesday | 12
Wednesday | 93
Thursday | 22
Friday | 66
Saturday | 25
基本上,第一列按星期几(星期日 -> 星期一)排序,第二列按行的count(*) 排序。
到目前为止,我有一个这样的查询:
order_query = "CASE
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Sunday' THEN 1
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Monday' THEN 2
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Tuesday' THEN 3
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Wednesday' THEN 4
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Thursday' THEN 5
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Friday' THEN 6
WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Saturday' THEN 7
END"
week = ProfessionalAvailability.where.not(appointment_id: nil).group('DAYNAME(CONVERT_TZ(timeslot,"UTC","America/Toronto"))').order(order_query).count
这适用于我的情况。但是,如您所见,order_query 是一个相当长的字符串,我想知道是否有一种简单的 ActiveRecord 方法可以做到这一点。
我的数据库在 MySQL 中。
非常感谢~
【问题讨论】:
标签: mysql ruby-on-rails activerecord