首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql在行上选择grouping by和datdiff

mysql在行上选择grouping by和datdiff
EN

Stack Overflow用户
提问于 2020-07-19 00:28:18
回答 1查看 42关注 0票数 0

给定这些数据:

代码语言:javascript
复制
workercode | timestamp          | action |
01         | 19/07/20 09:00:00  | _in     |
01         | 19/07/20 16:00:00  | _out    |
01         | 20/07/20 09:00:00  | _in     |
01         | 20/07/20 13:00:00  | _out    |
02         | 16/07/20 09:00:00  | _in     | 
02         | 16/07/20 15:00:00  | _out    | 

我需要为每个用户获取,他在那一天呆了多少小时。类似于:

代码语言:javascript
复制
01 | 19/07/20 | 7 |
01 | 20/07/20 | 4 |
02 | 16/07/20 | 6 |

我尝试按workercodecast(timestamp, date)分组,并在select上尝试像datediff这样的东西,但我不能完全做到这一点。有什么简单的方法可以做到这一点吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-19 01:16:20

试试这个:

这是给MsSql的。

代码语言:javascript
复制
// For MS SQL.    
    CREATE TABLE TEST(workercode int, timestamp DATETIME2, action NVARCHAR(10))
    
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (1, '19/07/20 09:00:00', '_in')
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (1, '19/07/20 16:00:00', '_out')
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (1, '20/07/20 09:00:00', '_in')
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (1, '20/07/20 13:00:00', '_out')
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (2, '16/07/20 09:00:00', '_in')
    INSERT INTO dbo.TEST(workercode, timestamp, action) VALUES (2, '16/07/20 15:00:00', '_out')


SELECT temp.workercode, temp.date, DATEDIFF(HOUR, MIN(temp.timestamp), MAX(temp.timestamp)) 
    FROM (SELECT DATEFROMPARTS(Year(t.timestamp), Month(t.timestamp), Day(t.timestamp)) as date, t.workercode, t.timestamp, t.action  FROM dbo.TEST as t) as temp
GROUP BY temp.date, temp.workercode

这是给MySql的。

代码语言:javascript
复制
//For MySQL
CREATE TABLE TEST(workercode int, timestamp1 TIMESTAMP, action VARCHAR(10));

INSERT INTO TEST(workercode, timestamp1, action) VALUES (1, "19/07/20 09:00:00", "_in");
INSERT INTO TEST(workercode, timestamp1, action) VALUES (1, "19/07/20 16:00:00", "_out");
INSERT INTO TEST(workercode, timestamp1, action) VALUES (1, "20/07/20 09:00:00", "_in");
INSERT INTO TEST(workercode, timestamp1, action) VALUES (1, "20/07/20 13:00:00", "_out");
INSERT INTO TEST(workercode, timestamp1, action) VALUES (2, "16/07/20 09:00:00", "_in");
INSERT INTO TEST(workercode, timestamp1, action) VALUES (2, "16/07/20 15:00:00", "_out");


SELECT temp.workercode, temp.date, TIMEDIFF(MAX(temp.timestamp1), MIN(temp.timestamp1)) 
    FROM (SELECT DATE(CONCAT_WS('-',Year(t.timestamp1), Month(t.timestamp1), Day(t.timestamp1))) as date, t.workercode, t.timestamp1, t.action  FROM TEST as t) as temp
GROUP BY temp.date, temp.workercode;

但是这段代码没有数据检查功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62970959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档