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 从两个日期之间的单独表格中计算2列_Sqlite - Fatal编程技术网

Sqlite 从两个日期之间的单独表格中计算2列

Sqlite 从两个日期之间的单独表格中计算2列,sqlite,Sqlite,我有一个查询,它使用子查询从2个单独的表中计算2列,这很有效。现在,我必须在这个查询中实现根据通话记录的日期过滤这些结果的功能。我将发布我正在处理的查询: SELECT (m.FirstName || " " || m.LastName) AS Members, ( SELECT count(CallToLineOfficers.MemberID) FROM CallToLineOfficers WHERE CallToLineOffice

我有一个查询,它使用子查询从2个单独的表中计算2列,这很有效。现在,我必须在这个查询中实现根据通话记录的日期过滤这些结果的功能。我将发布我正在处理的查询:

SELECT (m.FirstName || " " || m.LastName) AS Members,
   (
       SELECT count(CallToLineOfficers.MemberID) 
         FROM CallToLineOfficers
        WHERE CallToLineOfficers.MemberID = m.MemberID
   )
+  (
       SELECT count(CallToMembers.MemberID) 
         FROM CallToMembers
        WHERE CallToMembers.MemberID = m.MemberID
   ) AS Tally
FROM Members AS m, Call, CallToMembers, CallToLineOfficers
Join Call on CallToMembers.CallID = Call.CallID
and CallToLineOfficers.CallID = Call.CallI
WHERE m.FirstName <> 'None'
-- and Call.Date between '2017-03-21' and '2017-03-22'
GROUP BY m.MemberID
ORDER BY m.LastName ASC;

目前,子查询只对成员ID进行过滤。因此,对于外部查询中的任何成员ID,它们都返回完整计数

要减少计数,必须在子查询中进行筛选:

SELECT (FirstName || " " || LastName) AS Members,
   (
       SELECT count(*)
         FROM CallToLineOfficers
         JOIN Call USING (CallID)
        WHERE MemberID = m.MemberID
          AND Date BETWEEN '2017-03-21' AND '2017-03-22'
   )
+  (
       SELECT count(*)
         FROM CallToMembers
         JOIN Call USING (CallID)
        WHERE MemberID = m.MemberID
          AND Date BETWEEN '2017-03-21' AND '2017-03-22'
   ) AS Tally
FROM Members AS m
WHERE FirstName <> 'None'
ORDER BY LastName ASC;

样本数据和预期结果将很有帮助。不管怎么说,看起来好像你忘记加入m和Call表了。最初我把它们放在那里,但似乎不知道它们是否正确。我将阅读它们,并提供我得到的和应该得到的截图。使用CallID是不是说Call.CallID=CallToMembers.CallID的另一种方式?我以前没有见过使用。是的,它是相同的,但也从结果中删除了重复的列。太好了。我希望8个月前我就知道了哈哈。我还采纳了您最后一个问题的建议,并决定在这里使用子查询。
SELECT (FirstName || " " || LastName) AS Members,
   (
       SELECT count(*)
         FROM CallToLineOfficers
         JOIN Call USING (CallID)
        WHERE MemberID = m.MemberID
          AND Date BETWEEN '2017-03-21' AND '2017-03-22'
   )
+  (
       SELECT count(*)
         FROM CallToMembers
         JOIN Call USING (CallID)
        WHERE MemberID = m.MemberID
          AND Date BETWEEN '2017-03-21' AND '2017-03-22'
   ) AS Tally
FROM Members AS m
WHERE FirstName <> 'None'
ORDER BY LastName ASC;