1

我在 SQL 中查询时遇到问题。我需要生成的查询是输出上个月销售的最昂贵汽车的详细信息。

到目前为止,我的 SQL 代码如下:

SELECT CarMake, MAX(CFSSellingPrice) AS ['PriceOfCar']
FROM CarForSale
WHERE CFSSoldDate BETWEEN CVDATE('01/02/2013') AND CVDATE('01/03/2013')
GROUP BY CarMake;

我遇到的问题是它输出了不止一辆汽车,并且也没有正确生产过去一个月中最昂贵的汽车。

即使有人能指出我正确的方向,任何帮助都将不胜感激。

感谢您的时间,

艾琳:)

4

5 回答 5

2

您的查询包含cvdate(),所以我猜您正在使用 MS Access。如果是这样,您可以使用top 1查找最昂贵的汽车出售:

SELECT  top 1 CarMake
,       CFSSellingPrice
FROM    CarForSale
WHERE   CFSSoldDate BETWEEN CVDATE('01/02/2013') AND CVDATE('01/03/2013')
order by 
        CFSSellingPrice desc
于 2013-03-17T13:25:50.270 回答
0

以下对我有用(使用 format() 对您的汽车和销售进行分组,并在 WHERE 子句中使用子查询)

具有能够跨越数月的额外好处。

SELECT 
  format(cfs.CFSSoldDate,"yyyy mm") AS SoldMonth
, cfs.CarMake
, MAX(CFSSellingPrice) AS PriceOfCar

FROM CarsForSale AS cfs

WHERE 
 cfs.CFSSoldDate BETWEEN #1/1/2013# AND #3/31/2013# 
 AND cfs.CFSSellingPrice = (SELECT 
     max(c.CFSSellingPrice) FROM CarsForSale AS c 
     WHERE format(c.CFSSoldDate, "yyyy mm") = format(cfs.CFSSoldDate, "yyyy mm"))

GROUP BY 
    format(cfs.CFSSoldDate, "yyyy mm"), cfs.CarMake
于 2013-03-20T04:30:22.420 回答
0

使用Top关键字

SELECT Top 1 CarMake, MAX(CFSSellingPrice) AS ['PriceOfCar']
    FROM CarForSale
    WHERE CFSSoldDate BETWEEN CVDATE('01/02/2013') AND CVDATE('01/03/2013')
    GROUP BY CarMake;
于 2013-03-17T13:27:21.410 回答
0

试试下面

SELECT CarMake, MAX(CFSSellingPrice) AS ['PriceOfCar']
FROM CarForSale
WHERE CFSSoldDate BETWEEN CVDATE('01/02/2013') AND CVDATE('01/03/2013');

不要使用group by关键字...

于 2013-03-17T13:27:46.313 回答
0

此查询将为您提供所有记录,例如,如果有汽车制造商转向具有相同的销售价格并且这是价格范围内的最高价格。

SELECT  CarMake, CFSSellingPrice
FROM    CarForSale
WHERE   CFSSellingPrice =
        (
            SELECT  TOP 1 CFSSellingPrice
            FROM    CarForSale
            WHERE   CFSSoldDate BETWEEN CVDATE('01/02/2013') AND 
                    CVDATE('01/03/2013')
            ORDER   BY CFSSellingPrice
        )
于 2013-03-17T13:38:45.473 回答