Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQLite的透视查询_Sqlite_Datetime - Fatal编程技术网

使用SQLite的透视查询

使用SQLite的透视查询,sqlite,datetime,Sqlite,Datetime,我有一个数据库和两个需要交互的表。第一个表是一个成员表(login),它有其id(id)、名字(given\u name)和姓氏(family\u name)。第二个表包含ISO 8601字符串中的人员登录或成员id(mid)的打卡时间(dateTimeIn)和打卡时间(dateTimeOut)日期时间,以及他们可以执行的活动类型(type)dateTimeIn和dateTimeOut都是ISO 8601日期时间字段,类型,id,mid,给定的名称和家族名称都是字符串。绑定这两个表的远程外键是h

我有一个数据库和两个需要交互的表。第一个表是一个成员表(
login
),它有其id(
id
)、名字(
given\u name
)和姓氏(
family\u name
)。第二个表包含ISO 8601字符串中的人员登录或成员id(
mid
)的打卡时间(
dateTimeIn
)和打卡时间(
dateTimeOut
)日期时间,以及他们可以执行的活动类型(
type
dateTimeIn
dateTimeOut
都是ISO 8601日期时间字段,
类型
id
mid
给定的名称
家族名称
都是字符串。绑定这两个表的远程外键是
hours.mid
,它将目录映射到
login.id

登录
表格:

CREATE TABLE login(id TEXT主键不为NULL、给定名称TEXT不为NULL、family name TEXT不为NULL、lastseen INTEGER不为NULL)

小时数
表格:

创建表小时数(中间文本、键入文本、dateTimeIn整数、dateTimeOut整数)

我正在寻找的是一个查询,它将为我提供以下任何日期范围的表。例如,2013年6月,它应该生产类似的产品。如果我有更多的人登录,那么它也会将他们添加到下面,按姓、名排序

given_name|family_name|Crew|Meeting|Detail|Training
Mark      |Tomlin     |35  |6      |9     |1        
另一个令人惊叹的问题是,如果我能得到一个年度视图,随着每个成员的加入,它们将成为一个新行

given_name|family_name|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
Mark      |Tomlin     |35 |62 |27 |12 |88 |35 | - | - | - | - | - | -  

我确实需要一个查询,该查询将为我提供当前月份内每个人当前所有时间的列表。我是通过以下查询来实现的

SELECT
    *
FROM
    hours
WHERE
    dateTimeIn BETWEEN date('now', 'start of month') AND date('now', 'start of month','+1 month','-1 day');
我首先发现了一个查询,它向我展示了如何给出枢轴的一般外观。从那时起,我就开始尝试,直到我找到了一个适合我的选择

此查询以秒数形式提供数据库中每个成员的总数

SELECT
    m.id,
    m.given_name,
    m.family_name,
    SUM(CASE WHEN h.type = 'Crew' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Crew,
    SUM(CASE WHEN h.type = 'Detail' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Detail,
    SUM(CASE WHEN h.type = 'Meeting' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Meeting,
    SUM(CASE WHEN h.type = 'Training' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Training
FROM login m JOIN hours h ON m.id = h.mid
GROUP BY m.id;
然后我可以增加这个,只给我一个运行总数为本月以及

SELECT
    m.id,
    m.given_name,
    m.family_name,
    SUM(CASE WHEN h.type = 'Crew' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Crew,
    SUM(CASE WHEN h.type = 'Detail' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Detail,
    SUM(CASE WHEN h.type = 'Meeting' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Meeting,
    SUM(CASE WHEN h.type = 'Training' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Training
FROM login m JOIN hours h ON m.id = h.mid
WHERE
    dateTimeIn BETWEEN date('now', 'start of month') AND date('now', 'start of month', '+1 month', '-1 day')
GROUP BY m.id;

现在我只需要做最后一个来显示一年的运行总数。

我确实需要一个查询,该查询将为我提供当前月份内每个人当前所有小时的列表。我是通过以下查询来实现的

SELECT
    *
FROM
    hours
WHERE
    dateTimeIn BETWEEN date('now', 'start of month') AND date('now', 'start of month','+1 month','-1 day');
我首先发现了一个查询,它向我展示了如何给出枢轴的一般外观。从那时起,我就开始尝试,直到我找到了一个适合我的选择

此查询以秒数形式提供数据库中每个成员的总数

SELECT
    m.id,
    m.given_name,
    m.family_name,
    SUM(CASE WHEN h.type = 'Crew' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Crew,
    SUM(CASE WHEN h.type = 'Detail' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Detail,
    SUM(CASE WHEN h.type = 'Meeting' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Meeting,
    SUM(CASE WHEN h.type = 'Training' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Training
FROM login m JOIN hours h ON m.id = h.mid
GROUP BY m.id;
然后我可以增加这个,只给我一个运行总数为本月以及

SELECT
    m.id,
    m.given_name,
    m.family_name,
    SUM(CASE WHEN h.type = 'Crew' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Crew,
    SUM(CASE WHEN h.type = 'Detail' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Detail,
    SUM(CASE WHEN h.type = 'Meeting' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Meeting,
    SUM(CASE WHEN h.type = 'Training' THEN strftime('%s', h.dateTimeOut) - strftime('%s', h.dateTimeIn) END) Training
FROM login m JOIN hours h ON m.id = h.mid
WHERE
    dateTimeIn BETWEEN date('now', 'start of month') AND date('now', 'start of month', '+1 month', '-1 day')
GROUP BY m.id;

现在我只需要做最后一个来显示一年的运行总数。

获取每个人所做的小时数
--受他人生活的启发?对不起,我想不起你指的是什么。我想,我现在要删除我的评论,我希望你也这样做。你尝试了什么?您在这些查询的哪一方面有问题?按日期过滤?计算时间间隔?聚合值?排序?首先,我不知道如何旋转一张桌子。所以我现在正在查找这些信息。我不确定一开始该怎么做,甚至不知道这是否可能,但我开始阅读尽可能多的关于SQLite的SQL手册。起初我遇到了一些问题,计算每个成员在一个月内的工作小时数,但我最终通过这个查询解决了这个问题<代码>选择类型和(strftime('%s',dateTimeOut)-strftime('%s',dateTimeIn))作为按类型划分的小时组的时间,mid但现在我需要关注它。
了解每个人的工作时间
——受他人生活启发?对不起,我想不起你指的是什么。我想,我现在要删除我的评论,希望你也这么做。你尝试过什么?您在这些查询的哪一方面有问题?按日期过滤?计算时间间隔?聚合值?排序?首先,我不知道如何旋转一张桌子。所以我现在正在查找这些信息。我不确定一开始该怎么做,甚至不知道这是否可能,但我开始阅读尽可能多的关于SQLite的SQL手册。起初我遇到了一些问题,计算每个成员在一个月内的工作小时数,但我最终通过这个查询解决了这个问题<代码>选择类型和(strftime('%s',dateTimeOut)-strftime('%s',dateTimeIn))作为按类型划分的小时组的时间,mid但现在我需要旋转它。