mysql时间格式 - mysql时间函数



获得一天的总工作时间mysql (2)

试试这个:

select [User_id], sum([Time_count])/3600
from (
  select [User_id],
         case when [in_out]=1 then   UNIX_TIMESTAMP([Date_time])
              when [in_out]=0 then - UNIX_TIMESTAMP([Date_time])
              end as [Time_count]
  from my_table
) as a
group by [User_id]

我不知道MySQL的语法,所以如果有人发现错误,请纠正它们。 也许不能工作。 例如,如果您有一个用户登录。在这种情况下,您只能过滤[in_out]字段中具有相同数字1和0的用户。

我有一个MySQL表,员工登录和注销时间记录。 这里在进出栏1代表登录和0代表登出。

  [id]   [User_id]           [Date_time]                 [in_out]
    1       1          2011-01-20 09:30:03                  1
    2       1          2011-01-20 11:30:43                  0
    3       1          2011-01-20 11:45:12                  1
    4       1          2011-01-20 12:59:56                  0
    5       1          2011-01-20 13:33:11                  1
    6       1          2011-01-20 15:38:16                  0
    7       1          2011-01-20 15:46:23                  1
    8       1          2011-01-20 17:42:45                  0

是否有可能通过使用单个查询来检索一天中的总工作时间?

我尝试了很多,但都是徒劳的。 我可以在PHP中使用数组来做到这一点,但无法使用单个查询。


Answer #1

鲁迪的思路是正确的。 如果你想要十进制小时,在date_time字段使用UNIX_TIMESTAMP(),否则返回的类型将是一个DATETIME(很难解析)。 下面是你的前四行数据加另外两个不同日期的结果:

SELECT 
    `user_id`, 
    DATE(`date_time`) AS `date`, 
    SUM(UNIX_TIMESTAMP(`date_time`)*(1-2*`in_out`))/3600 AS `hours_worked`
FROM `test` 
GROUP BY date(`date_time`), `user_id`;
+---------+------------+--------------+
| user_id | date       | hours_worked |
+---------+------------+--------------+
|       1 | 2011-01-20 |       3.2567 |
|       1 | 2011-01-21 |       3.0000 |
+---------+------------+--------------+




datetime