我想获得不同的类别和订单由curdate列的结果。与订单的区别与条款
select distinct(Category)'Category' from sizes order by curdate desc
但是,这个简单的查询会产生错误。
如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中。
我想获得不同的类别和订单由curdate列的结果。与订单的区别与条款
select distinct(Category)'Category' from sizes order by curdate desc
但是,这个简单的查询会产生错误。
如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在选择列表中。
我怕你有同样的约束对SELECT DISTINCT
为GROUP BY
条款:即,你不能使用的字段这不是在字段列表中声明的,因为它只是不知道在排序时使用哪一个curdate
,以防在同一Category
中存在多个具有不同curdate
值的行。
编辑:你可以试试:
SELECT Category FROM sizes GROUP BY Category ORDER BY MAX(curdate) DESC
与MIN更换MAX或任何适合你。编辑2:在这种情况下,MAX(curdate)甚至不必在字段列表中出现,因为它用于聚合函数。
CURDATE必须在SELECT语句还,现在你只指定类别
作为错误消息说,你不能通过未选择wehen的列使用SELECT DISTINCT
(与GROUP BY
相同的问题...)。改变你的查询到这一点:
SELECT DISTINCT category, curdate FROM sizes ORDER BY curdate DESC
编辑:回复yourt评论:
,如果你要选择与每个类别的最后日期的不同类别,你必须改变你的查询了一下。我可以想到两种可能性:使用MAX()(如发布Costi Ciudatu)或使用子选择做一些疯狂的事情 - 第一种方法是更好的方法。
如果我添加CURDATE在seelct条款不会返回不同的类别 – 2011-04-05 12:46:57
返回,如预期,Category'和'的不同组合'CURDATE ' – oezi 2011-04-05 12:48:52
你看起来是所有类别的列表后,与每个类别的日期。无论你是想最早的第一或最新首先,你应该能够执行下列操作之一:
SELECT Category, MAX(curdate) FROM sizes GROUP BY Category
或者:
SELECT Category, MIN(curdate) FROM sizes GROUP BY Category
根据您是否要在最近或最早的日期相关联每个类别。如果您需要在列表中,然后通过日期是ORDER
版,添加以下到结束的一个:
ORDER BY MAX(curdate)
ORDER BY MIN(curdate)
完全错误说什么,它不能,如果提交的排序是没有的一部分订购不同的列表选择。原因在于对于所选的每个不同值可能有多个排序值。如果数据看起来像这样
Category CurDate
AAA 1/1/2011
BBB 2/1/2011
AAA 3/1/2011
AA应该在不同列表中的BBB之前还是之后?如果你只是在没有明显的日期的情况下订购,你可以在两个位置获得。由于SQL不知道哪个日期应该与不同的类别相关联,因此它不会让您按日期排序。
with cte as
(
select
Category,
[CurDate],
row_number() over(partition by Category order by [CurDate]) as rn
from sizes
)
select
Category
from cte
where rn = 1
order by [CurDate]
如果我加入seelct条款CURDATE它不会返回不同的类别 – 2011-04-05 12:45:06