Google sheets 使用GoogleSheets查询确定Id在每个月的脱机天数
我有一个谷歌表,它记录了一个Id何时离线以及何时恢复。此工作表中的每一行都有对象的Id、脱机日期、返回日期以及是否计数的布尔值 在Sheet2上,我想记录在过去一年中,该对象每月脱机的天数 示例数据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 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我为您提供了一个解决方案,但如果您将链接共享从“仅查看”更改为“可编辑”,则演示会更容易一些。我也将在答案中共享它,但如果我为您将其安装在共享工作表上,则可能更容易理解。