簡體   English   中英

在Access中為每個人選擇第1行,第2行和第3行

[英]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

我需要幫助搞清楚的是如何顯示每個所有者的最新的第一,第二和第三資產I​​D(不要與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM