![](/img/trans.png)
[英]How can I Select 1st, 2nd and 3rd values in different columns - Ms Access
[英]Select 1st, 2nd, and 3rd rows for each person in Access
我有兩張桌子:資產和人。 一個人可能擁有0個或更多資產,如下所示:
ID, First, Last, Name, Email, Current Employee
218 Bob Robert Robert, Bob 1@a.b Yes (-1)
249 Bill Nobody Nobody, Bill 2@a.b No (0)
396 Steve Stevens Stevens, Steve 3@a.b Yes (-1)
549 John Doe Doe, John 4@a.b Yes (-1)
Inventory ID, Date, Model, Owner, Status
10001 1-1-2012 E6500 218 Active
10003 2-1-2012 E6500 396 Active
10005 1-1-2013 T1500 396 Active
10009 2-1-2013 T1500 218 Active
10059 3-1-2013 T1500 549 Inactive
10100 1-1-2015 T540p 218 Active
10150 1-1-2016 M81 218 Active
我需要幫助搞清楚的是如何顯示每個所有者的最新的第一,第二和第三資產ID(不要與UID混淆)和模型(以及其他列),以及該人的名字,姓氏,和電子郵件,但僅適用於當前的員工,如下所示:
Email, First, Last, Inventory 1, Model 1, Inventory 2, Model 2, Inventory 3, Model 3
1@a.b Robert Bob 10150 M81 10100 T540P 10100 T1500
3@a.b Stevens Steve 10005 T1500 10003 E6500
(比爾沒有什么,因為他不是現任員工,約翰也沒有,因為他沒有活躍的資產)
不幸的是,這是在Access(不是我的選擇)。 我嘗試了很多不同的查詢,但根本無法解決。
這是一種相當強力的方法,假設所有者沒有重復的日期:
select p.*,
a1.inventory as inventory1, a1.model as model1,
a2.inventory as inventory2, a2.model as model2,
a3.inventory as inventory3, a3.model as model3
from ((people as p inner join
assets as a1
on a1.owner = p.id
) inner join
assets as a2
on a2.owner = p.id
) inner join
assets as a3
on a3.owner = p.id
where a1.date = (select max(date) from assets where assets.owner = p.id) and
a2.date = (select max(date) from assets where assets.owner = p.id and assets.date < a1.date) and
a3.date = (select max(date) from assets where assets.owner = p.id and assets.date < a2.date);
注意:幾乎任何其他數據庫都這么容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.