On 2012-05-17 9:37 AM, Don Wieland wrote:
Hi folks,

I am trying to compile a query that does statistics on appointments based on specific criteria. Here is my starting query:

SELECT
    u.user_id,
    c.client_id,
    c.first_name,
    c.last_name,
    a.time_start AS stime,
    FROM_UNIXTIME(a.time_start,'%Y-%m-%d') AS formatted

 FROM tl_appt a
  LEFT JOIN tl_users u ON a.user_id = u.user_id
  LEFT JOIN tl_clients c ON a.client_id = c.client_id
  LEFT JOIN tl_rooms r on a.room_id = r.room_id

WHERE a.appt_id IS NOT NULL AND FROM_UNIXTIME(a.time_start,'%Y-%m-%d') between '2011-05-01' and '2011-12-31' and r.location_id = '2' and a.user_id IN (14) ORDER BY u.last_name, u.first_name, c.last_name, c.first_name

This will return a set of rows where a client may have MORE THEN ONE appointment. From this set I need to narrow more:

1) Only display the first appointment PER Client. (there will be no duplicate client_id)

Then once I have that set of rows established, I need to query for two more result:

1) Show New Customers = those where the COUNT of appointments (in the entire tl_appt table) LESS THAN the stime = 0

2) Show FORMER Customers = those where the COUNT of appointments (in the entire tl_appt table) LESS THAN the stime > 0

I am sure I need a multiple select query, but I am having a hard time wrapping my head around it.

Thanks for any feedback.

Conceptually the hard bit might be narrowing to the first appt per client. For various approaches to this task see "Within-group aggregates" at http://www.artfulsoftware.com/infotree/queries.php.

If new & former clients are to be retrieved from first appts only, you might want to save the result of the within-groups agggregate query to a result table and query that. If the whole process has to happen often, consider developing a wee cube, or just a denormalised reslt table that can be invoked whenever needed.

PB

-----------------


Don


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to