Google sheets 使用GoogleSheets查询确定Id在每个月的脱机天数

Google sheets 使用GoogleSheets查询确定Id在每个月的脱机天数,google-sheets,google-sheets-query,Google Sheets,Google Sheets Query,我有一个谷歌表,它记录了一个Id何时离线以及何时恢复。此工作表中的每一行都有对象的Id、脱机日期、返回日期以及是否计数的布尔值 在Sheet2上,我想记录在过去一年中,该对象每月脱机的天数 示例数据 Id StartDate EndDate Bool 999999 1/5/2020 1/10/2020 TRUE 999999 12/25/2020 1/4/2020 TRUE 888888 10/1/2019 1/20/2020 TRUE 888888

我有一个谷歌表,它记录了一个Id何时离线以及何时恢复。此工作表中的每一行都有对象的Id、脱机日期、返回日期以及是否计数的布尔值

在Sheet2上,我想记录在过去一年中,该对象每月脱机的天数

示例数据

Id      StartDate   EndDate    Bool
999999  1/5/2020    1/10/2020  TRUE
999999  12/25/2020  1/4/2020   TRUE
888888  10/1/2019   1/20/2020  TRUE
888888  1/21/2020   1/30/2020  TRUE
表2

Id      2/1/2020  1/1/2020  12/1/2019  11/1/2019  10/1/2019  9/1/2019
999999     15        15        15         15         15         15
888888     111       111       111        111        111        111
期望输出

Id      2/1/2020  1/1/2020  12/1/2019  11/1/2019  10/1/2019  9/1/2019
999999     0         9          7          0          0         0
888888     0         29         31         30         31        0

为了找出产品离线的天数,我做了以下操作

=SUM(QUERY(Sheet1!$A:$D,CONCATENATE("select datediff(C,B) where D=TRUE and A=",$A2)))
但是它不检查天是否在月内,我考虑在datediff函数中使用if语句,类似这样的功能

select datediff(ifs(StartDate<1stOfTheMonth,1stOfTheMonth,StartDate>1stOfTheMonth and StartDate<EndOfMonth,StartDate,StartDate>EndOfMonth,EndOfMonth),ifs(EndDate>EndOfMonth,EndOfMonth,EndDate<EndOfMonth and EndDate>StartOfMonth,EndDate,EndDate<1stOfTheMonth,1stOfTheMonth)) where ...

选择datediff(ifs(开始日期1stofthemonth和开始日期EndOfMonth、EndOfMonth)、ifs(EndDate>EndOfMonth、EndOfMonth、EndDateStartOfMonth、EndDate、EndDate在样本表上创建一个新选项卡,将此公式放在A1中,然后将顶行的格式设置为格式>数字>更多格式>自定义数字格式:

嗯,yyyy

=ARRAYFORMULA(TRANSPOSE(QUERY(VLOOKUP(SEQUENCE(COUNTA(Sheet1!B2:B)*(MAX(Sheet1!C2:C-Sheet1!B2:B)+1),1,0)/(MAX(Sheet1!C2:C-Sheet1!B2:B)+1)+2,{ROW(Sheet1!B2:B),Sheet1!A2:A,IF((Sheet1!B2:B+SEQUENCE(1,MAX(Sheet1!C2:C-Sheet1!B2:B)+1,0)<=Sheet1!C2:C)*Sheet1!D2:D,IFERROR(EOMONTH(Sheet1!B2:B+SEQUENCE(1,MAX(Sheet1!C2:C-Sheet1!B2:B)+1,0),-1)+1),)},MOD(SEQUENCE(COUNTA(Sheet1!B2:B)*(MAX(Sheet1!C2:C-Sheet1!B2:B)+1),1,0),MAX(Sheet1!C2:C-Sheet1!B2:B)+1)*{0,1}+{2,3}),"select Col2,Count(Col2) where Col2 is not null group by Col2 pivot Col1 order by Col2 desc label Col2'ID'")))

=ARRAYFORMULA(TRANSPOSE(TRANSPOSE)(查询)(VLOOKUP(SEQUENCE)(COUNTA(Sheet1!B2:B)*)(MAX(Sheet1!C2:C-Sheet1!B2:B)+1),1,0)/(MAX(Sheet1!C2:C-Sheet1!B2:B)+1)+2,{ROW(Sheet1!B2:B),Sheet1!A2:A,IF((Sheet1!B2:B+SEQUENCE)(1,MAX(Sheet1!C2:C-Sheet1!B2:B)+:B)+1,0)@Inticks我为您提供了一个解决方案,但如果您将链接共享从“仅查看”更改为“可编辑”,则演示会更容易一些。我也将在答案中共享它,但如果我为您将其安装在共享工作表上,则可能更容易理解。