Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
SQL选择查询365天_Sql_Sqlite - Fatal编程技术网

SQL选择查询365天

SQL选择查询365天,sql,sqlite,Sql,Sqlite,我正在尝试创建一个SQL查询,以选择团队成员的利用率百分比。 我正在寻找一个to daily basis select查询,当它大于0时显示利用率,当它为空时显示“0”。以便以后能够将这些数字绘制为折线图 我已经编写了以下365个select查询,并使用UNIONALL方法将它们组合在一起。它现在正在工作,但速度非常慢!。 如果你有一个更好的想法来生产365天的每日产出,那就太好了 非常感谢 问候 穆罕默德 代码: SELECT ifnull(( SELECT SUM(CAS

我正在尝试创建一个SQL查询,以选择团队成员的利用率百分比。 我正在寻找一个to daily basis select查询,当它大于0时显示利用率,当它为空时显示“0”。以便以后能够将这些数字绘制为折线图

我已经编写了以下365个select查询,并使用UNIONALL方法将它们组合在一起。它现在正在工作,但速度非常慢!。 如果你有一个更好的想法来生产365天的每日产出,那就太好了

非常感谢

问候 穆罕默德

代码:

 SELECT ifnull((    
    SELECT SUM(CAST(pc_loading.value AS INT))
    FROM ticket
    JOIN ticket_custom start_date  ON (ticket.id = start_date.ticket  AND start_date.name  = 'planned_start_date')
    JOIN ticket_custom finish_date ON (ticket.id = finish_date.ticket AND finish_date.name = 'planned_finish_date')
    JOIN ticket_custom pc_loading  ON (ticket.id = pc_loading.ticket  AND pc_loading.name  = 'percentage_loading')
    WHERE UPPER(ticket.owner)='#########'
    AND ticket.type = 'Internal Resource'
    AND DATE(substr(start_date.value, 7, 4)  || '-' || substr(start_date.value, 4, 2)  || '-' || substr(start_date.value, 1, 2))  <= DATE('2020-01-01')
    AND DATE(substr(finish_date.value, 7, 4) || '-' || substr(finish_date.value, 4, 2) || '-' || substr(finish_date.value, 1, 2)) >= DATE('2020-01-01')
    AND status NOT IN ("closed", "suspended")) , 0) UNION ALL

  SELECT ifnull((   
    SELECT SUM(CAST(pc_loading.value AS INT))
    FROM ticket
    JOIN ticket_custom start_date  ON (ticket.id = start_date.ticket  AND start_date.name  = 'planned_start_date')
    JOIN ticket_custom finish_date ON (ticket.id = finish_date.ticket AND finish_date.name = 'planned_finish_date')
    JOIN ticket_custom pc_loading  ON (ticket.id = pc_loading.ticket  AND pc_loading.name  = 'percentage_loading')
    WHERE UPPER(ticket.owner)='#########'
    AND ticket.type = 'Internal Resource'
    AND DATE(substr(start_date.value, 7, 4)  || '-' || substr(start_date.value, 4, 2)  || '-' || substr(start_date.value, 1, 2))  <= DATE('2020-01-02')
    AND DATE(substr(finish_date.value, 7, 4) || '-' || substr(finish_date.value, 4, 2) || '-' || substr(finish_date.value, 1, 2)) >= DATE('2020-01-02')
    AND status NOT IN ("closed", "suspended")) , 0) UNION ALL
……等等 使用递归CTE返回2020年的所有日期,将其交叉连接到您的查询并按每个日期分组:

 SELECT ifnull((    
    SELECT SUM(CAST(pc_loading.value AS INT))
    FROM ticket
    JOIN ticket_custom start_date  ON (ticket.id = start_date.ticket  AND start_date.name  = 'planned_start_date')
    JOIN ticket_custom finish_date ON (ticket.id = finish_date.ticket AND finish_date.name = 'planned_finish_date')
    JOIN ticket_custom pc_loading  ON (ticket.id = pc_loading.ticket  AND pc_loading.name  = 'percentage_loading')
    WHERE UPPER(ticket.owner)='#########'
    AND ticket.type = 'Internal Resource'
    AND DATE(substr(start_date.value, 7, 4)  || '-' || substr(start_date.value, 4, 2)  || '-' || substr(start_date.value, 1, 2))  <= DATE('2020-01-01')
    AND DATE(substr(finish_date.value, 7, 4) || '-' || substr(finish_date.value, 4, 2) || '-' || substr(finish_date.value, 1, 2)) >= DATE('2020-01-01')
    AND status NOT IN ("closed", "suspended")) , 0) UNION ALL

  SELECT ifnull((   
    SELECT SUM(CAST(pc_loading.value AS INT))
    FROM ticket
    JOIN ticket_custom start_date  ON (ticket.id = start_date.ticket  AND start_date.name  = 'planned_start_date')
    JOIN ticket_custom finish_date ON (ticket.id = finish_date.ticket AND finish_date.name = 'planned_finish_date')
    JOIN ticket_custom pc_loading  ON (ticket.id = pc_loading.ticket  AND pc_loading.name  = 'percentage_loading')
    WHERE UPPER(ticket.owner)='#########'
    AND ticket.type = 'Internal Resource'
    AND DATE(substr(start_date.value, 7, 4)  || '-' || substr(start_date.value, 4, 2)  || '-' || substr(start_date.value, 1, 2))  <= DATE('2020-01-02')
    AND DATE(substr(finish_date.value, 7, 4) || '-' || substr(finish_date.value, 4, 2) || '-' || substr(finish_date.value, 1, 2)) >= DATE('2020-01-02')
    AND status NOT IN ("closed", "suspended")) , 0) UNION ALL
with recursive days as (
  select date('2020-01-01') date 
  union all 
  select date(date, '+1 day') 
  from days
  where strftime('%Y', date, '+1 day') = '2020'
)
SELECT days.date, COALESCE(SUM(CAST(pc_loading.value AS INT)), 0)
FROM days 
CROSS JOIN ticket 
JOIN ticket_custom start_date ON (ticket.id = start_date.ticket AND start_date.name = 'planned_start_date') 
JOIN ticket_custom finish_date ON (ticket.id = finish_date.ticket AND finish_date.name = 'planned_finish_date') 
JOIN ticket_custom pc_loading ON (ticket.id = pc_loading.ticket AND pc_loading.name = 'percentage_loading') 
WHERE UPPER(ticket.owner)='#########' AND ticket.type = 'Internal Resource' 
AND DATE(substr(start_date.value, 7, 4) || '-' || substr(start_date.value, 4, 2) || '-' || substr(start_date.value, 1, 2)) <= days.date 
AND DATE(substr(finish_date.value, 7, 4) || '-' || substr(finish_date.value, 4, 2) || '-' || substr(finish_date.value, 1, 2)) >= days.date 
AND status NOT IN ("closed", "suspended")
GROUP BY days.date

您认真地编写了365次相同的查询,并将所有查询合并在一起?预期结果和一些数据库模式信息将对您的问题有所帮助。您只需使用GROUP BY,就可以在一个查询中获得这些信息。为什么在日期比较中使用substr?开始日期和结束日期列是什么样子的?请发布一些样本数据。这比您当前所做的要简单得多开始日期和结束日期格式为YYYY/MM/DD,我必须把这些日期替换下来才能继续工作them@DragonVale从您的连接来看,您存储的日期似乎有以下格式:DD/MM/YYYYIt正在抱怨递归天数报告执行失败的方法:near days:syntax error您的sqlite版本是什么?我认为sqlite从3.8.3版起就支持CTE了除非升级,否则不能使用CTE。哦,这在目前是不可能的。谢谢,您认为还有其他原因吗?要模拟CTE,您必须编写一个查询,其中包括365/366个UNION ALL,每天1个,如选择“2020-01-01”日期UNION ALL选择“2020-01-02”UNION ALL。。。。。这不是一个合适的解决方案,因为您已经有365个查询。