【发布时间】:2017-09-27 06:05:37
【问题描述】:
现在我有一个查询查询以便对其进行排序的表单。我知道可以按多个条件进行排序,但是当我尝试将第二个顺序条件添加到查询中时,它似乎没有做任何事情。
这是随机 LP Picker 查询。它让我从数百个列表中随机选择 10 个 LP:
SELECT TOP 10 Artists.OriginalName, LPs.Album, LPs.rating, LPs.[Notable
Songs], LPs.Comments, [Listened (LPs)].last_date, [Listened
(LPs)].times_listened, LPs.LPID
FROM (LPs INNER JOIN Artists ON LPs.Performer_id = Artists.ArtistID) INNER
JOIN [Listened (LPs)] ON LPs.LPID = [Listened (LPs)].disc_id
WHERE (((LPs.Status)=1 Or (LPs.Status)=5) AND ((LPs.[Media Type])=1))
ORDER BY Rnd(Int(Now()*[LPID])-Now()*[LPID]);
在我的表单中,我按日期排序查询,如下所示:
SELECT [Random LP Picker].*
FROM [Random LP Picker]
ORDER BY [Random LP Picker].last_date;
我尝试将这两种排序都放在 Random LP Picker 查询中,所以它看起来像:
ORDER BY Rnd(Int(Now()*[LPID])-Now()*[LPID]), [Listened (LPs)].last_date;
这样做不会给我按 last_date 排序的列表。我也尝试反转这两个排序项,但这会导致几个字段根本不出现,原因超出我的知识范围。
如果我可以在一个查询中完成所有这些操作将会很有用。有可能吗?
注意:有几个人说过,为什么不按日期订购。问题是,这个查询所做的是对所有条目进行随机排序,然后返回前 10 个。因此,如果我通过 Rnd(...) 部分删除订单,那么我将不再获得 10 个随机条目。如果有另一种方法可以在不使用 ORDER 的情况下获得 10 个随机条目,那么我很乐意这样做,但这是我知道的唯一方法。
【问题讨论】:
-
我不确定 ms 访问,但一般而言,SQL 按照定义的谓词顺序排列,即从左到右。同样在其他 rdbms angines 中,您可以定义 ASC 或 DESC,例如按 DATE1 ASC、DATE2 DESC 排序。
-
所有你想要的最终结果集都在
last_date上排序,因此为什么不在查询中只在[Listened (LPs)].last_date上排序? -
如果我只在 last_date 之前订购,那么我如何获得 10 个随机条目?除了我正在做的事情之外,还有其他方法可以做到这一点吗?