Skip to content

Instantly share code, notes, and snippets.

@sixtyfive
Created May 21, 2011 23:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sixtyfive/984987 to your computer and use it in GitHub Desktop.
Save sixtyfive/984987 to your computer and use it in GitHub Desktop.
date_range_scoped_by_user_and_month(start_date, end_date, user, month)
SELECT id, user_id, activity_month_id, activity_week_id,
CASE
WHEN HOUR(starts_on) = 22 THEN DATE(TIMESTAMPADD(HOUR, 2, starts_on))
WHEN HOUR(starts_on) = 23 THEN DATE(TIMESTAMPADD(HOUR, 1, starts_on))
ELSE DATE(starts_on)
END AS starts_on,
CASE
WHEN HOUR(ends_on) = 21 THEN DATE(TIMESTAMPADD(HOUR, 2, ends_on))
WHEN HOUR(ends_on) = 22 THEN DATE(TIMESTAMPADD(HOUR, 1, ends_on))
ELSE DATE(ends_on)
END AS ends_on
FROM activity_weeks INNER JOIN activity_months_activity_weeks ON id = activity_week_id
WHERE
user_id = #{user.id} AND activity_month_id = #{month.id}
HAVING (
starts_on >= '#{start_date}' AND ends_on <= '#{end_date}'
) OR (
starts_on <= '#{start_date}' AND starts_on <= '#{end_date}'
AND
ends_on >= '#{start_date}' AND ends_on <= '#{end_date}'
) OR (
starts_on >= '#{start_date}' AND starts_on <= '#{end_date}'
AND
ends_on >= '#{start_date}' AND ends_on >= '#{end_date}'
)
ORDER BY starts_on DESC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment