On Thu, Jan 28, 2010 at 4:37 AM, Wade Preston Shearer
<[email protected]> wrote:
> I have a difficult MySQL query to write. Is there anyone that can assist?
>
> I have a users table. I have another table with things the user does.
>
> I need to select all the things the user has done within the current three
> year window since the date the user's account was created.
>
>
> Example:
>
> So, if the user's account was created in Feb 2001, they did something in Mar
> 2003, something in Nov 2009, and something else in Jan 2010, the query would
> return 2 records, because they did…
>
> .       one thing in the first three years
> .       nothing in the second three years
> .       and two things in the third (current) three year period
>
>
> …and we only want the things that were done within the current three year
> period.
>
>
> Is that possible in a single query?
>

If I read it correctly, it sounds like this is your logic:

# number of days since last 3 yr mark.
x = (current date - hire date) % (365 days * 3)

# slice you care about
select everything between (current date - x) and current date


MySQL would look something like this (disclaimer: i didn't actually
run this, but it looks right):


SELECT a.*
FROM users u
LEFT JOIN user_actions a
ON a.user_id = u.id
WHERE
        u.id = ?
AND
        DATE(a.created_at)
                BETWEEN
                        DATE_SUB(
                                CURDATE(),
                                MOD(
                                        DATE_DIFF(
                                                CURDATE(),
                                                DATE(u.created_at)
                                        ),
                                        (365 * 3)
                                ) DAYS
                        )
                AND
                        CURDATE()



-- 
justin
http://justinhileman.com

_______________________________________________

UPHPU mailing list
[email protected]
http://uphpu.org/mailman/listinfo/uphpu
IRC: #uphpu on irc.freenode.net

Reply via email to