I'm having trouble generating what should be a simple sqlite query.  I need a
query that returns the ROW data corresponding to a GROUP BY and aggregate
restriction.  Here's an example:

    sqlite> create table t (t integer, x integer, y integer);
    sqlite> insert into t values (100, 10, 20);
    sqlite> insert into t values (101, 10, 21);
    sqlite> insert into t values (100, 20, 30);
    sqlite> select max(t), x, y from t group by x;
    max(t) = 100
         x = 20
         y = 30

    max(t) = 101
         x = 10
         y = 20
    sqlite>

Note that the second row returned is not an actual row from the table.  What I
really want returned there is the (101, 10, 21) row.

I haven't been able to come up with a HAVING clause that does what I want,
either.  Just doing HAVING MAX(t) evaluates to HAVING TRUE for each row with a
non-zero value of t, so all rows are selected.  I tried HAVING t = MAX(t) but
then I don't get every possible x value:

    sqlite> select max(t), x, y from t group by x having t = max(t);
    max(t) = 100
         x = 20
         y = 30
    sqlite>

I could probably solve this by writing a custom aggregate function that took
the rowid, x and t, and returned the rowid with the greatest t for the value
of x, but that seems unnecessary and overly complicated...

For clarification, what I want back from the query on the above table are two
rows: (101, 10, 21) and (100, 20, 30) which are the rows with the maximum
value of t for each value of x.

Any help greatly appreciated!

Derrell

Reply via email to