Limit MySQL row primarily by time and then (maybe) by number of rows -
i have mysql table stores input user data , add timestamp each form submitted.
the forms submitted daily, user can decide multiple per day.
i have display graph showing last 6 weeks data, or, in case 6 weeks of data not contain enough data point (40) have limit on number of points (it data points earlier dates).
can in 1 query or should rely on more complicate sql or worse have rely on python/php/c++/... wathever?
recap:
- 6 weeks of data minimum
- if 40 data points not available in range selected -> take last 40 regardless of timestamp limit.
clarification:
- if number of elements in time range 60 want 60 elements.
- if number of element in time range 30 want last 40 elements.
there many ways achieve in 1 query, doubt can done efficiently. assuming table indexed on date/time field, query should virtually instant:
select count(datefield) mytable datefield >= date_sub(now(), interval 6 week); i go in 2 passes, , fire either of these 2 versions depending on return value of above query:
-- if previous query returned < 40 select * mytable order datefield desc limit 40; or
-- if previous query returned >= 40 select * mytable datefield >= date_sub(now(), interval 6 week); notices:
now()should replaced litteral value compute @ beginning of process (or else wouldn't filtering on samewherecondition time passes)the first
selectstatement should lockingselect ... updatestatement, prevent interferences until real data (second query). of course, happen within 1 transaction.
Comments
Post a Comment