[SQL] Help: records selecteren op max datum

Pagina: 1
Acties:
  • 281 views sinds 30-01-2008
  • Reageer

  • -RenE-
  • Registratie: September 2001
  • Laatst online: 31-03 23:10
Een vraagje voor alle SQL-guru's hier. Vast heel simpel, maar ik ben inmiddels al even bezig.

Database is Mysql v4.1

Tabel tblresults_9: (onder staat een volledige Mysql dump van de structuur)
`result_id`,
`lab_id`,
`dtm_insert`,
....
`note_z` longtext

Dat ziet er ongeveer zo uit:
111 189 2005-09-12 10:28:52 NULL bla
105 192 2005-09-11 14:45:56 NULL geen
131 192 2005-09-12 15:36:54 NULL blabla
98 194 2005-09-09 16:11:15 NULL bla

Nu wil ik het volgende bereiken:
111 189 2005-09-12 10:28:52 NULL bla
131 192 2005-09-12 15:36:54 NULL blabla
98 194 2005-09-09 16:11:15 NULL bla

Ik wil dus alleen de (volledige) records zien met de laatste datum. Van 192 houdt ik dus het record van 12-9 over.

Nu heb ik al het een en ander geprobeerd. Zoals:

Select * from tblresults_9 group by lab_id having dtm_insert=max(dtm_insert);

Maar dan verdwijnt record met lab_id 192.

Select *,max(dtm_insert) from tblresults_9 group by lab_id;

Levert wel een maximum datum in, maar de rest van het record is van de vorige datum.

Hoe dit nu op te lossen?


------------------------------------------------------
Volledige structuur van de tabel
------------------------------------------------------

CREATE TABLE `tblresults_9` (
`result_id` int(11) NOT NULL auto_increment,
`lab_id` int(11) NOT NULL default '0',
`dtm_insert` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`plas_z` varchar(50) default NULL,
`assa_z` smallint(6) default NULL,
`meth_z` smallint(6) default NULL,
`equi_z` smallint(6) default NULL,
`ress_z` float default NULL,
`ress_z2` float default NULL,
`lot_z` text,
`resq_z` float default NULL,
`resq_z2` float default NULL,
`colq_z` smallint(6) default NULL,
`uplim_z` float default NULL,
`unit_z` smallint(6) default NULL,
`clas_z` smallint(6) default NULL,
`base_z` smallint(6) default NULL,
`nmeth_z` varchar(100) default NULL,
`note_z` longtext,
PRIMARY KEY (`result_id`),
KEY `PRIMARY_KEY` (`lab_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Results D-Dimer' AUTO_INCREMENT=146 ;

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:12
waarom doe je een group by, als je geen aggregate funtie gebruikt in je select list ?
Hetzelfde geldt voor die having.

doe eens zo:
code:
1
2
select * from tabel 
where datum = ( select max(datum) from tabel )

[ Voor 44% gewijzigd door whoami op 24-09-2005 14:35 ]

https://fgheysels.github.io/


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Staat dit niet gewoon letterlijk in de handleiding? http://dev.mysql.com/doc/...mum-column-group-row.html

  • -RenE-
  • Registratie: September 2001
  • Laatst online: 31-03 23:10
Beiden bedankt voor het meedenken.

De eerste query geeft maar één rij terug en dat is niet wat ik wil.

De verwijzing naar de Mysql handleiding levert inderdaad wat ik nodig heb:

SELECT * FROM tblresults_9 s1 WHERE dtm_insert = ( SELECT MAX( s1 . dtm_insert ) FROM tblresults_9 s2 WHERE s1 . lab_id = s2 . lab_id )