我的表中有一行显示唯一值。我需要返回值为当天正确的首次登录时间
A B C D
1 Session User Date Time
2 1000 U1 3/6/2017 10:01
3 1234 U1 3/6/2017 12:00
正如您所看到的,一个代理可以在当天登录两次,我只需第一次。
我认为我可以将INDEX和MATCH用于用户和日期的多个条件,但是如何包含逻辑测试以检查具有较低数字的会话(以后的会话始终与会话ID号越高)?
到目前为止,我的公式看起来像这样:
=INDEX(A:D,MATCH("U1"&"3/6/2017",B:B&C:C,0),D:D)
我实际上并没有直接使用U1和日期,而是使用单元格引用,因此语法错误不是问题。
另外,我知道这是一个数组公式,所以用Ctrl + Shift + Enter确认。
但是,我不知道如何从这里继续并说出检查B:B中的U1和C:C中的日期,但只返回A; A中最低会话的D; D
答案 0 :(得分:2)
您可以添加一个额外的帮助列IsFisrtLogin
,其公式如下:
=COUNTIFS($B:$B,$B2,$C:$C,$C2,$A:$A,"<"&$A2)=0
然后只筛选出此公式计算结果为TRUE
的行,并且您将只获得每个相应用户和日期的第一次登录(即最低会话数)。
答案 1 :(得分:2)
您使用INDEX
和MATCH
的直觉是正确的。如果它们按时间顺序排列,则无需找到最小值,只需查找第一个出现位置 - 这正是MATCH
所做的。
=INDEX($B$2:$B$3,MATCH(G2&H2,$C$2:$C$3&$D$2:$D$3,0))
作为数组公式输入( Ctrl + Shift + 输入而非 Enter < / KBD>)
结果如下(参见专栏I
)
答案 2 :(得分:0)
尝试,
=INDEX(D:D, AGGREGATE(15, 6, ROW($1:$99)/((B$1:B$99="U1")*(C$1:C$99=DATE(2017, 3, 6))*(A$1:A$99=AGGREGATE(15, 6, (A$1:A$99)/((B$1:B$99="U1")*(C$1:C$99=DATE(2017, 3, 6))), 1))), 1))
这将检索所提供日期的最低数字会话编号,然后在类似的包装公式中使用该编号来检索与会话,用户和日期相关联的时间。请记住将结果格式化为时间;它最初将作为原始数字检索。
"U1"
和DATE(2017, 3, 6)
可以引用包含该值的单元格。对于第二个,第三个等匹配,用适当的序数替换, 1)
(AGGREGATE&#39的小部分函数的 k )。
答案 3 :(得分:0)
输入此数组公式(通过 Ctrl + Shift + 输入确认):
=INDEX(A:D,
MATCH(
MIN(INDEX(A:D,MATCH("U1"&"3/6/2017",B:B&C:C,0))&"U1"&"3/6/2017"
,D:D&B:B&C:C,0)
,D:D)
事实上,它只是获得初始功能的最小值,并将其与用户和当天相匹配,以获得您想要的结果! ;)
答案 4 :(得分:0)
作为公式的替代方法,您可以创建一个数据透视表,无论数据的顺序如何,它都会自动显示每天每个用户首次登录的会话编号和时间: