问题描述
当我向 Alexa 说晚安时,我正在跟踪日期/时间。这些条目是非常奇怪且无用的字符串,而不是日期和时间:
示例数据:
January 25,2021 at 12:03AM
January 25,2021 at 11:27PM
January 26,2021 at 11:17PM
Alexa 只是将这些非常规的日期/时间字符串转储到 A1-A 中???在第一个标签上。
我使用这个公式来显示我每个月的平均就寝时间:
= QUERY(ARRAYFORMULA(
IF(LEN(A2:A),{
MONTH(REGEXEXTRACT(A2:A,"\D+") & 1),REGEXEXTRACT(A2:A,"\D+"),IF(TIMEVALUE(REGEXEXTRACT(A2:A,"\d+:\d+.*")) > 0.5,TIMEVALUE(REGEXEXTRACT(A2:A,"\d+:\d+.*")),"\d+:\d+.*")) + 1)
},"")),"Select Col1,Col2,avg(Col3) where Col1 is not null
group by Col1,Col2 Order By Col1 asc label Col1 '#',Col2 'Month',avg(Col3)
'Average bedtime'
")
但实际上,我对周末的关注不像我对工作日晚上的关注那么大。对如何调整公式以使其仅显示周日至周四晚上感到困惑。
为了让它变得更棘手..如果我在星期四午夜后睡觉(喘气),那仍然应该包括在内。
转向那些比我更疯狂的技能!
感谢您的帮助,
画画
解决方法
我认为这应该考虑到上面提到的边缘情况:
单元格 B2:
=arrayformula(
regexreplace(A2:A,"^([\w,]+) at ([\w: ]+)$","$1 $2")
)
单元格 C2:
=arrayformula(
query(
{
text(B2:B - (B2:B - int(B2:B) < timevalue("4:00 AM")),"mmmm"),text(B2:B - (B2:B - int(B2:B) < timevalue("4:00 AM")),"ddd"),timevalue(B2:B) + (B2:B - int(B2:B) < timevalue("4:00 AM"))
},"select Col1,avg(Col3)
where Col2 matches 'Sun|Mon|Tue|Wed|Thu'
group by Col1
pivot Col2",0
)
)
将结果单元格格式化为格式>数字>时间。
,这是部分解决方案。
=ArrayFormula(query(if(A2:A = "",{
month(REGEXEXTRACT(A2:A,"(.*) at")),REGEXEXTRACT(A2:A,"\D+"),"\d+:.*") + (REGEXEXTRACT(A2:A,"\D\D$")="AM"),mod(REGEXEXTRACT(A2:A,"(.*) at") + REGEXEXTRACT(A2:A,"at (.*)")-1,7)
}),"Select Col1,Col2,avg(Col3) where Col4 > 0.5 and Col4 < 5.5
group by Col1,Col2 Order By Col1 asc label Col1 '#',Col2 'Month',avg(Col3)
'Average bedtime'
"))
它没有解决 Erik 提出的年和月末问题。每月第一天中午之前的任何条目都应包含在上个月中。 Col4 在 0.5 是周日中午,5.5 是周五中午。埃德