[vox-tech] mysql 4.0 query help
Dylan Beaudette
dylan at iici.no-ip.org
Sat Aug 27 19:49:00 PDT 2005
Hi,
I am having some trouble working out the best way to get my data out of
a table stored in MySQL.
Here is an example of the table structure:
+-------+-----------+---------------+
| muid | total_pct | codename |
+-------+-----------+---------------+
| CA001 | 2 | argixerolls |
| CA001 | 1 | haploxeralfs |
| CA001 | 1 | haploxerolls |
| CA001 | 1 | vitrandepts |
| CA001 | 3 | vitrixerands |
| CA001 | 11 | xerochrepts |
| CA001 | 1 | xeropsamments |
| CA001 | 77 | xerumbrepts |
| CA002 | 1 | argixerolls |
| CA002 | 51 | haploxeralfs |
| CA002 | 1 | haploxerolls |
| CA002 | 16 | vitrixerands |
| CA002 | 21 | xerochrepts |
| CA002 | 1 | xerorthents |
| CA002 | 2 | xerumbrepts |
As demonstrated above there are multiple muid values, each with a
total_pct value. I am interested only in the record which contains the
highest total_pct value for a given muid value. I have tried using the
max() function with a group by clause, but this does not accomplish
what I want. Instead, I get the first record associated with a given
muid value - as would be expected apparently...
Since I am running MySQL 4.0 , subselects are not possible. I tried
using a simple join to retrieve the desired data, but so far I have not
been successful. Here is an example of the simple join method I was
trying to use:
select a.muid, b.* from ca_subgroups as a, ca_subgroups as b group by
a.muid having max(a.total_pct) = b.total_pct;
where ca_subgroups is the name of the table described above. This query
results in no records matched...
I suppose that I could create a temporary table containing only muid
and max(total_pct) along with a join to the original table... I was
just hoping for something a little more elegant.
Thanks in advance!
--
Dylan Beaudette
Soils and Biogeochemistry Graduate Group
University of California at Davis
530.754.7341
More information about the vox-tech
mailing list