SOLUTION 1: It's probably simplest, conceptually, to build a temporary table which provides the proper ordering. The "ordering" column below is a computed value which determines the desired orderint of the File's. Then, you can join with an ORDER BY clause that gives the desired order.
mysql> create temporary table temp -> select substring(FileNumber,1,6) as File, -> min(concat(1-RUSH, PDate, PTime, substring(FileNumber,1,6))) as ordering -> from mytable -> group by File; Query OK, 7 rows affected (0.04 sec) Records: 7 Duplicates: 0 Warnings: 0 mysql> select * from temp; +--------+-------------------+ | File | ordering | +--------+-------------------+ | 1-1023 | 012/0408:001-1023 | | 1-3333 | 012/0408:301-3333 | | 1-4444 | 012/0406:001-4444 | | 1-6655 | 112/1108:401-6655 | | 1-7654 | 012/0508:001-7654 | | 1-9868 | 112/0514:001-9868 | | 1-9999 | 012/0408:001-9999 | +--------+-------------------+ 7 rows in set (0.00 sec) mysql> select mytable.* from -> mytable, temp -> where substring(mytable.FileNumber,1,6) = temp.File -> order by ordering,RUSH desc,PDate,PTime; +------+------------+-------+-------+ | RUSH | FileNumber | PTime | PDate | +------+------------+-------+-------+ | 1 | 1-4444-001 | 06:00 | 12/04 | | 1 | 1-1023-001 | 08:00 | 12/04 | | 0 | 1-1023-002 | 14:00 | 12/09 | | 0 | 1-1023-003 | 11:00 | 12/10 | | 1 | 1-9999-123 | 08:00 | 12/04 | | 0 | 1-9999-124 | 09:30 | 12/09 | | 0 | 1-9999-125 | 10:00 | 12/15 | | 1 | 1-3333-000 | 08:30 | 12/04 | | 1 | 1-7654-043 | 08:00 | 12/05 | | 0 | 1-9868-000 | 14:00 | 12/05 | | 0 | 1-6655-021 | 08:40 | 12/11 | | 0 | 1-6655-022 | 13:30 | 12/15 | +------+------------+-------+-------+ 12 rows in set (0.01 sec) SOLUTION 2: Yes, you can do it in one select statement. You join two copies of your table, using one to compute the ordering. I don't know how to get rid of the ordering column in the result, as the expression won't work in the ORDER BY clause. mysql> select A.*, -> min(concat(1-B.RUSH, B.PDate, B.PTime, substring(B.FileNumber,1,6))) as ordering -> from mytable A, mytable B -> where substring(A.FileNumber,1,6) = substring(B.FileNumber,1,6) -> group by A.FileNumber -> order by ordering, A.RUSH desc, A.PDate, A.PTime; +------+------------+-------+-------+-------------------+ | RUSH | FileNumber | PTime | PDate | ordering | +------+------------+-------+-------+-------------------+ | 1 | 1-4444-001 | 06:00 | 12/04 | 012/0406:001-4444 | | 1 | 1-1023-001 | 08:00 | 12/04 | 012/0408:001-1023 | | 0 | 1-1023-002 | 14:00 | 12/09 | 012/0408:001-1023 | | 0 | 1-1023-003 | 11:00 | 12/10 | 012/0408:001-1023 | | 1 | 1-9999-123 | 08:00 | 12/04 | 012/0408:001-9999 | | 0 | 1-9999-124 | 09:30 | 12/09 | 012/0408:001-9999 | | 0 | 1-9999-125 | 10:00 | 12/15 | 012/0408:001-9999 | | 1 | 1-3333-000 | 08:30 | 12/04 | 012/0408:301-3333 | | 1 | 1-7654-043 | 08:00 | 12/05 | 012/0508:001-7654 | | 0 | 1-9868-000 | 14:00 | 12/05 | 112/0514:001-9868 | | 0 | 1-6655-021 | 08:40 | 12/11 | 112/1108:401-6655 | | 0 | 1-6655-022 | 13:30 | 12/15 | 112/1108:401-6655 | +------+------------+-------+-------+-------------------+ 12 rows in set (0.03 sec) From: "Roger Davis" <[EMAIL PROTECTED]> To: "Mysql" <[EMAIL PROTECTED]> Subject: Order By or Group By Help Please Date: Thu, 5 Dec 2002 19:54:57 -0500 Ok, I will try this one again. I need some help on a select if it is possible. Take for Example the following data. -------------------------------------- | RUSH | FileNumber | PTime | PDate | -------------------------------------- | 1 | 1-1023-001 | 08:00 | 12/04 | | 1 | 1-4444-001 | 06:00 | 12/04 | | 0 | 1-1023-002 | 14:00 | 12/09 | | 1 | 1-3333-000 | 08:30 | 12/04 | | 0 | 1-1023-003 | 11:00 | 12/10 | | 1 | 1-9999-123 | 08:00 | 12/04 | | 0 | 1-9999-124 | 09:30 | 12/09 | | 0 | 1-6655-021 | 08:40 | 12/11 | | 0 | 1-9999-125 | 10:00 | 12/15 | | 1 | 1-7654-043 | 08:00 | 12/05 | | 0 | 1-6655-022 | 13:30 | 12/15 | | 0 | 1-9868-000 | 14:00 | 12/05 | -------------------------------------- To end up grouped like this. -------------------------------------- | RUSH | FileNumber | PTime | PDate | -------------------------------------- | 1 | 1-4444-001 | 06:00 | 12/04 | | 1 | 1-1023-001 | 08:00 | 12/04 | | 0 | 1-1023-002 | 14:00 | 12/09 | | 0 | 1-1023-003 | 11:00 | 12/10 | | 1 | 1-9999-123 | 08:00 | 12/04 | | 0 | 1-9999-124 | 09:30 | 12/09 | | 0 | 1-9999-125 | 10:00 | 12/15 | | 1 | 1-3333-000 | 08:30 | 12/04 | | 1 | 1-7654-043 | 08:00 | 12/05 | | 0 | 1-9868-000 | 14:00 | 12/05 | | 0 | 1-6655-021 | 08:40 | 12/11 | | 0 | 1-6655-022 | 13:30 | 12/15 | -------------------------------------- Basically, I need this. If it is a RUSH (1), It needs to be first If there are duplicate files (Like 1-9999 (it has 2 dups) or 1-1023 (2 dups)) and one of them is a rush They need to be grouped together. Then sort it by PDate and PTime I have tried several group by combinations but no luck so far. Any help will be appreciated. Thanks Roger Oh yeah, SQL, MySQL --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php