) In MySQL we don't have subselect. this is not valid:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
instead of this, in MySQL we can write:
CREATE TEMPORARY TABLE tmp (
article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);
LOCK TABLES shop read;
INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;
SELECT shop.article, dealer, shop.price FROM shop, tmp WHERE
shop.article=tmp.article AND shop.price=tmp.price;
UNLOCK TABLES;
DROP TABLE tmp;
"Can it be done with a single query?"
Yes, but only by using a quite inefficient trick that I call the "MAX-CONCAT
trick":
SELECT article,
SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
0.00+LEFT( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
FROM shop
GROUP BY article;
----- Original Message -----
From: "Mark Wilson" <[EMAIL PROTECTED]>
To: "Mysql Mailing List" <[EMAIL PROTECTED]>
Sent: Wednesday, October 08, 2003 9:35 AM
Subject: Easy (?) conditional SELECT
> I have an app for which people can submit plans.
> Each plan relates to a particular product.
> A new plan can be submitted for the same product, so each plan has its own
> submission number. (1,2,3...)
> Each plan is composed of artifacts.
> The (artifacts) table looks like this:
> artifact_id INT
> product_id INT
> plan_submission_number INT
> (etc)
>
> Task: get all the items for the most recent (i.e., highest) submission
plan for
> a particular product.
>
> Since I'm relatively new to MySQL, and haven't mastered much beyond the
most
> basic SELECTs, much less JOINs, I'm not sure how to do this. I think the
> following should work (for product_id = 1), but it returns a syntax error.
>
> SELECT *
> FROM `artifacts`
> WHERE ( product_id = '1' AND plan_submission_number = (
> SELECT MAX( plan_submission_number )
> FROM 'artifacts'
> WHERE product_id = '1' ) )
> ---------------
> Error message:
> You have an error in your SQL syntax. Check the manual that corresponds
to your
> MySQL server version for the right syntax to use near 'SELECT MAX(
> plan_submission_number )
> FROM 'artifacts'
> WHERE p
> ---------------
> What am I missing? Thanks....
>
> - Mark
>
> --
> Mark Wilson, Computer Programming Unlimited (cpuworks.com)
> Web : http://cpuworks.com Tel: 410-549-6006
> Email: [EMAIL PROTECTED] Fax: 410-549-4408
>
>
>
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
>
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]