I have a table that looks like something like this:

    timestamp                value           person
    ===============================================
    2010-01-12 00:00:00       33              emp1
    2010-01-12 11:00:00       22              emp1
    2010-01-12 09:00:00       16              emp2
    2010-01-12 08:00:00       16              emp2
    2010-01-12 12:12:00       45              emp3
    2010-01-12 13:44:00       64              emp4
    2010-01-12 06:00:00       33              emp1
    2010-01-12 15:00:00       12              emp5

I wanted to find the maximum value associated with each person. The obvious
query was:

select person,max(value) from table group by person

Now I wanted to include the timestamp associated with each max(value). I
could not use timestamp column in the above query because as everyone
knows, it won't appear in the group by clause. So I wrote this instead:

select x.timestamp,x.value,x.person from table as x,
(select person,max(value) as maxvalue from table group by person order by
maxvalue desc) as y
where x.person = y.person
and x.value = y.maxvalue

This works -- to an extent. I now see:

    timestamp                value           person
    ===============================================
    2010-01-12 13:44:00       64              emp4
    2010-01-12 12:12:00       45              emp3
    2010-01-12 06:00:00       33              emp1
    2010-01-12 00:00:00       33              emp1
    2010-01-12 08:00:00       16              emp2
    2010-01-12 09:00:00       16              emp2
    2010-01-12 15:00:00       12              emp5

The problem is now I get all the entries for emp1 and emp2 that ends up
with the same max(value).

Suppose among emp1 and emp2, I only want to see the entry with the latest
timestamp. IOW, I want this:

    timestamp                value           person
    ===============================================
    2010-01-12 13:44:00       64              emp4
    2010-01-12 12:12:00       45              emp3
    2010-01-12 06:00:00       33              emp1
    2010-01-12 09:00:00       16              emp2
    2010-01-12 15:00:00       12              emp5

What kind of query would I have to write? Is it possible to extend the
nested query I wrote to achieve what I want or does one have to rewrite
everything from the scratch?

If its important, timestamps are actually stored as julian days. I use the
datetime() function to convert them back to a string representation in
every query.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to