现在我有一个查询查询的表单,以便对其进行排序。我知道可以通过多个条件进行排序,但是当我尝试将第二个订单条件添加到查询时,它似乎没有做任何事情。
这是随机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个随机条目,那么我很乐意这样做,但这是我知道的唯一方法。
答案 0 :(得分:1)
考虑将查询移动到派生表(即FROM
中的子查询)并对外部查询进行排序:
SELECT main.*
FROM
(SELECT TOP 10 a.OriginalName, l.Album, l.rating, l.[Notable Songs],
l.Comments, p.last_date, p.times_listened, l.LPID
FROM (LPs l INNER JOIN Artists a ON l.Performer_id = a.ArtistID)
INNER JOIN [Listened (LPs)] p ON l.LPID = p.disc_id
WHERE ((l.Status IN (1,5)) AND (l.[Media Type]=1))
ORDER BY Rnd(Int(Now()*l.[LPID])-Now()*l.[LPID])
) As main
ORDER BY main.last_date
答案 1 :(得分:0)
由于您希望最终结果集在last_date
上排序,因此您的上一个ORDER BY
应该在[Listened (LPs)].last_date
上。子查询应根据随机数返回TOP 10行。
您可以尝试更换线路
ORDER BY Rnd(Int(Now()*[LPID])-Now()*[LPID]), [Listened (LPs)].last_date;
带
[Listened (LPs)].last_date;
修改后的查询将如下:
SELECT 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))
AND LPs.LPID IN (SELECT TOP 10 LPID FROM LPs ORDER BY Rnd(Int(Now()*[LPID])-Now()*[LPID]))
ORDER BY [Listened (LPs)].last_date;