Search code examples
mysqldateselectsubquerymariadb-10.2

SELECT the first date in which 3 consecutive entries are between two dates


I would like to know the first date of the first 3 consecutive entries that are between two dates. Based on my SQLFiddle, I would expect the output to be '2021-01-24'.

I've looked at many examples but can't get them to work.

This query is not working how I want it to, I can't figure out the missing piece of my query. Here is the SQLFIDDLE: http://sqlfiddle.com/#!9/935fbd/1

SELECT DISTINCT
    logDate
FROM
    FoodLog
WHERE
    studentID = '1329' AND logDate BETWEEN '2021-01-01' AND '2021-05-01'
GROUP BY
    logDate
HAVING
    COUNT(logDate) = 3

I've tried working with the following, but can't figure out how to limit the search to studentID='1329' or my date range:

SELECT DISTINCT
    f.id,
    f.logDate
FROM
    FoodLog f,
    (
    SELECT
        f1.logDate START,
        f2.logDate NEXT
    FROM
        FoodLog f1,
        FoodLog f2
    WHERE
        f2.logDate <= DATE_ADD(f1.logDate, INTERVAL 1 DAY) AND f2.logDate > f1.logDate
) f2
WHERE
    f.logDate = f2.start OR(
        f.logDate = f2.next AND f2.start IS NOT NULL
    )
LIMIT 1

Solution

  • WITH
    cte1 AS ( 
        SELECT DISTINCT logDate
        FROM FoodLog
        WHERE logDate BETWEEN '2021-01-01' AND '2021-05-01'),
    cte2 AS (
        SELECT logDate, LEAD(logDate, 2) OVER (ORDER BY logDate) next2date
        FROM cte1
    )
    SELECT MIN(logDate) logDate 
    FROM cte2 
    WHERE DATEDIFF(next2date, logDate) = 2;
    

    fiddle