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