0

我在数据库中有以下两个表。一张表是人员表,另一张表是Entry表,entry表记录了人员进入一个部门

人表

    Person                  
Person_ID   Person_NIC  Person_Name Person_Last_Name    Person_Age  State
1           121212          ABC         BCD              12         ACTIVE
2           212121          ABB         BBB              13         NONACTIVE
3           111111          BBB         CCC              14         ACTIVE

条目表

ENTRY           
Entry_ID  Person_ID Entry_Escort    Entry_Date  
1         1           David         20121210    
2         1           David         20130110    
3         1           David         20130111    
4         1           David         20130112    
5         1           David     20130113    
6         2           David     20121210    
7         2           David     20130110    
8         2           David     20130111    
9         2           David     20130112    
10        2           David     20130113    

我必须为以下场景编写 sql。我需要为 1 月份在数据库中不活跃的人找到最后进入日期。谁能帮我查询。提前感谢您的帮助。

4

4 回答 4

1

试试这个::

Select 
p.*,
MAX(Entry_Date) 
from 
persons p
inner join entry ep on (p.Person_NIC=ep.Entry_ID)

where State='NONACTIVE'
GROUP BY ep.Entry_ID
于 2013-01-14T11:26:18.197 回答
1

这应该做你需要的:

select p.person_id, p.person_nic, p.Person_Name, p.Person_Last_Name,
       max(e.entry_date) max_entry_date
 from person p
      inner join entry e
              on e.entry_id = p.person_nic
where p.state = 'NONACTIVE'
group by p.person_id, p.person_nic, p.Person_Name, p.Person_Last_Name

ps 将 AGE 存储在数据库表中并不好,因为您必须不断更新它。最好即时存储出生日期和计算年龄(或在视图/虚拟列中)

于 2013-01-14T11:27:40.270 回答
1

这应该像这样简单:

SELECT p.Person_ID, MAX(e.Entry_Date) as MaxEntryDate
FROM 
 Person p 
 INNER JOIN Entry e
   ON p.Person_NIC = e.EntryID
WHERE p.State = 'NONACTIVE'
   AND Entry_Date  BETWEEN 20130101 AND 20130131
GROUP BY p.Person_ID
于 2013-01-14T11:27:48.510 回答
1

请尝试一下:根据需要在一月份更新...

SQLFIDDLE 演示

   Select p.person_id, p.person_nic,
   p.Person_Name,
   p.Person_Last_Name,max(e.entry_date )
   from person p
   inner join entry e 
   on (p.Person_id = e.person_id)
   where p.State='NONACTIVE'
   and month(e.entry_date) = 1
   GROUP BY p.person_nic, e.Entry_ID
   ;

| PERSON_ID | PERSON_NIC | PERSON_NAME | PERSON_LAST_NAME |MAX(E.ENTRY_DATE ) |
---------------------------------------------------------------------------------
|         2 |     212121 |         ABB |              BBB | January, 13 2013 |
于 2013-01-14T11:37:33.120 回答