Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询,用于查找上个月售出的最昂贵的汽车_Sql_Ms Access - Fatal编程技术网

SQL查询,用于查找上个月售出的最昂贵的汽车

SQL查询,用于查找上个月售出的最昂贵的汽车,sql,ms-access,Sql,Ms Access,我对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; 我遇到的问题是,它生产了不止一辆汽车,而且在过去一个月里没有

我对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;
我遇到的问题是,它生产了不止一辆汽车,而且在过去一个月里没有生产出最昂贵的汽车

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

谢谢你抽出时间

Alyn:)

您的查询包含,所以我猜您使用的是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

使用
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;
试试下面的方法

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

不要使用
分组依据
关键字…

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

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
        )

以下内容对我很有用(使用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

你在用什么
RDBMS
代表关系数据库管理系统
RDBMS是SQL
的基础,对于所有现代数据库系统,如MS SQL Server、IBM DB2、Oracle、MySQL等,都要小心日期被误解为月、日、年。通常情况下,最好以年、月、日的格式输入日期,以避免歧义。
top
如果没有
order by
就没什么用了,谢谢你,穆罕默德,这很好,也很有效。非常感谢您的帮助。感谢您的回复Mehul,但现在我发现“CarMake”的错误不是aggregate函数的一部分。哦。。你得到了答案。。刚果祝你好运……)您是否考虑过可能存在重复记录?例如,两个或两个以上的汽车制造商以每辆50万美元的价格销售了一辆汽车(恰好是最高的销售价格),并且在您的日期范围内。在Access
top
中包括领带,不需要subquery@Andomar哦,真的吗?所以它就像sql server中的
TOP WITH TIES
?注意,MS Access在TOP中包含匹配项。