gpt4 book ai didi

mysql - 按周检查的 SQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 10:50:57 26 4
gpt4 key购买 nike

我需要一个 SQL 查询来检查一个人是否在一年中连续两周处于事件状态。

例如,

Table1:
Name | Activity | Date
Name1|Basketball| 08-08-2014
Name2|Volleyball| 08-09-2014
Name3|None | 08-10-2014
Name1|Tennis | 08-14-2014

我想检索 Name1,因为该人在一年中连续两周处于事件状态。

到目前为止,这是我的查询:

SELECT DISTINCT Name 
FROM Table1
Where YEAR(Date) = 2014 AND
Activity NOT 'None' AND

这是我需要连续两周检查事件的逻辑的地方。一周可以用7到14天来形容。我正在使用 MYSQL。

最佳答案

我有意避免在 where 子句中使用 YEAR(Date),并建议您也这样做。在多行数据上使用函数来满足单个标准 (2014) 对我来说毫无意义,而且它会破坏索引的有效性(请参阅维基百科上的“sargable”)。恕我直言,仅按日期范围定义过滤器会更容易。

我使用了相关子查询来派生 nxt_date,它可能无法很好地扩展,但总体性能很可能取决于您的索引。

select distinct
name
from (
select
t.name
, t.Activity
, t.`Date`
, (
select min(table1.`Date`) from table1
where t.name = table1.name
and table1.Activity <> 'None'
and table1.`Date` > t.`Date`
) as nxt_date
from table1 as t
where ( t.`Date` >= '2014-01-01' and t.`Date` < '2015-01-01' )
and t.Activity <> 'None'
) as sq
where datediff(sq.nxt_date, sq.`Date`) <= 14
;

参见:http://sqlfiddle.com/#!9/cbbb3/9

关于mysql - 按周检查的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25160423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com