By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,649 Members | 1,560 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,649 IT Pros & Developers. It's quick & easy.

How to write query to select the Max(version) for each unique file_name record?

P: n/a
Hello All,

I am a MySQL newbie trying to write a query that selects file_name records
possessing the highest numbered version for that unique file_name. I show
sample data and two trial queries below. Logically I want to use
max(version) as a constraint in a Where Clause. However, the max() function
is not allowed directly in a where clause.

I have contemplated a second table to track the max version for each file
name. I would like to structure the data in an efficient manner for query
performance when the data set grows to many thousands of unique file_name
records with many hundreds of versions each.

Any guidance will be appreciated.

David Oberlitner
------------------------------------------------------------------------
----------------

Sample data:

mysql> select * from test;
+----+-----------+---------+
| id | file_name | version |
+----+-----------+---------+
| 1 | fone | 1 |
| 2 | ftwo | 1 |
| 3 | fone | 2 |
| 4 | fone | 3 |
| 5 | fthree | 1 |
| 6 | ffour | 1 |
| 7 | ftwo | 2 |
| 8 | ffour | 2 |
+----+-----------+---------+

The query below gets close in that it returns each file name and its
max(version), however it returns the ID field associated with the first
record instance of file_name and not the ID associated with the
max(version) instance of the file_name record.

mysql> select id, file_name, max(version) from test group by file_name;
+----+-----------+--------------+
| id | file_name | max(version) |
+----+-----------+--------------+
| 6 | ffour | 2 |
| 1 | fone | 3 |
| 5 | fthree | 1 |
| 2 | ftwo | 2 |
+----+-----------+--------------+
4 rows in set (0.02 sec)

The query below returns the empty set.

mysql> select id, file_name, max(version) from test group by file_name
having max(version);
Empty set (0.00 sec)

Additionally,
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/my***********...ie.nctu.edu.tw

Jul 19 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.