OK, now we are both confused.
 
 There is only 1 instance of each unit in the unit
 table. Unit_id id the primary key.
 
 There are thousands of instances of each unit in the
 log table. Each record in this table holds unit_id,
 temperature and date.
 
 If I understand correctly, your suggested queries
 would do what I need provided I added 'AND l.unit_id
 =
 ?' and then repeated the query for each unit. I
 could
 do this and it may be better than the present kludge
 
 but it would involve generating a list of units from
 the unit table and then looping through the list
 making a series of select calls.
 
 My question was - surely there is a way to do this
 in a single sql call.
 
 
> --- John Larsen <[EMAIL PROTECTED]> wrote:
> > Geez, do I have to do all your work for you, :)
> > First thing I can think of is,
> > Ok this makes no sence you have a units table with
> > unit_id as its main 
> > descriptor, but there can be several cases with
> the
> > same unit_id but you 
> > want the one with the max date. Date on the other
> > hand is stored in 
> > another table and references date to unit, so how
> in
> > the world can you 
> > specify you want the max date record of
> > many unit_id records  in the units table when
> there
> > is no identifying 
> > mark in said table to say which one matches with
> the
> > max date.. or am I 
> > missing something?
> > 
> > 
> > 
> > 
> > simon blenkinsop wrote:
> > 
> > >I don't think these would do what I want, I need
> > the
> > >record with the max date *for each unit*. Each of
> > >these would just select the one unit that had the
> > max
> > >date.
> > >
> > >Steve
> > >
> > >--- John Larsen <[EMAIL PROTECTED]> wrote:
> > >  
> > >
> > >>Try just doing a WHERE to select the record with
> > the
> > >>max date.
> > >>
> > >>SELECT u.unit_id, u.description,
> > >>u.lots_of_other_stuff, l.temp, l.date
> > >>FROM  units u, log l 
> > >>WHERE u.unit_id = l.unit_id and l.date=(SELECT
> > >>MAX(log.date) FROM log)
> > >>                                             ^^^
> > >>                                          you may be able to replace log with l 
> > >> here
> > >>                                   but I'm now sure if subqueries use aliases
> > >>from the parent.
> > >>
> > >>Or you can just  use your existing query as the
> > top
> > >>record is the one 
> > >>you want to keep and tell it to limit output to
> 1
> > >>record.
> > >>
> > >>SELECT 
> > >> u.unit_id,    
> > >> u.description,  
> > >> u.lots_of_other_stuff,
> > >> l.temp,
> > >> l.date
> > >> FROM units u, log l WHERE (u.unit_id =
> l.unit_id)
> > >>        ORDER by u.unit_id, l.date DESC
> > >> LIMIT 1
> > >>
> > >>
> > >>
> > >>The first solution would give you mulitple
> outputs
> > >>if you had multiple 
> > >>lines with the same maximum date, and the second
> > >>will only give you the 
> > >>first.
> > >>
> > >>simon blenkinsop wrote:
> > >>
> > >>    
> > >>
> > >>>I have a table containing the fields unit_id,
> > >>>temperature and date. This has data for around
> 20
> > >>>units, with many 1,000's of records for each.
> > >>>Further information on each unit is in another
> > >>>      
> > >>>
> > >>table
> > >>    
> > >>
> > >>>with just 1 entry per unit.
> > >>>
> > >>>I need to select the most recent record for
> each
> > >>>      
> > >>>
> > >>unit
> > >>    
> > >>
> > >>>together with its associated data. I cannot see
> > how
> > >>>      
> > >>>
> > >>to
> > >>    
> > >>
> > >>>do this in a single select. At present I sort
> by
> > >>>      
> > >>>
> > >>date
> > >>    
> > >>
> > >>>DESC and group by unit_id then my perl script
> > >>>      
> > >>>
> > >>discards
> > >>    
> > >>
> > >>>all but the 1st record for each unit.
> > >>>
> > >>>The select is:
> > >>>
> > >>>SELECT 
> > >>>u.unit_id,    
> > >>>u.description,  
> > >>>u.lots_of_other_stuff,
> > >>>l.temp,
> > >>>l.date
> > >>>FROM units u, log l WHERE (u.unit_id =
> l.unit_id)
> > >>>       ORDER by u.unit_id, l.date DESC
> > >>>
> > >>>
> > >>>This involves a lot of (perl) processing and
> > wasted
> > >>>mysql retrieval,
> > >>>there must be a better way.
> > >>>
> > >>>Any ideas ?
> > >>>
> > >>>Thanks
> > >>>
> > >>>Steve
> > >>>
> > >>>
> > >>>__________________________________
> > >>>Do you Yahoo!?
> > >>>Yahoo! SiteBuilder - Free, easy-to-use web site
> > >>>      
> > >>>
> > >>design software
> > >>    
> > >>
> > >>>http://sitebuilder.yahoo.com
> > >>>
> > >>> 
> > >>>
> > >>>      
> > >>>
> > >>
> > >>    
> > >>
> > >
> > >
> > >__________________________________
> > >Do you Yahoo!?
> > >Yahoo! SiteBuilder - Free, easy-to-use web site
> > design software
> > >http://sitebuilder.yahoo.com
> > >
> > >  
> > >
> > 
> > 
> 
> 
> __________________________________
> Do you Yahoo!?
> Yahoo! SiteBuilder - Free, easy-to-use web site
> design software
> http://sitebuilder.yahoo.com
> 


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

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

Reply via email to