0

今日ログインしているすべてのユーザーを選択するにはどうすればよいですか? ユーザー情報を保持するテーブルと、すべてのログイン/ログアウト時間情報を保持するテーブルが 2 つあります。

table users
===================================
userid | Name | FamilyName | Position

table movements
===================================
userid | Date | Hour | Status 

Table movements fields:

userid - holds user unique ID number (same as table users);
Date - holds users login/logout date (example: 2013-10-08 00:00:00);
Hour - holds users login/logout date time (example: 2013-10-08: 17:10:39);
Status - holds users flag (0 or 1) where 1 - login and 0 - logout;

テーブルユーザーは一目瞭然です。

私はこれまでこのようなことを試みてきました:

select p.userid, 
       p.Name, 
       p.FamilyName, 
       p.Position, 
       m.Date, 
       m.Status, 
       m.Hour 
from users as p 
   INNER JOIN movements as m ON p.userid=m.userid;

どんな助けでも大歓迎です。ありがとう。

4

4 に答える 4

0
select distinct
    p.userid, p.Name, p.FamilyName, p.Position
from 
    users as p 
inner join 
    movements as m on p.userid=m.userid
where 
    day(m.date) = day(getdate()) and
    month(m.date) = month(getdate()) and
    year(m.date) = year(getdate())

注: 使用している DB サーバーを指定していません。getdate() は Microsoft Sql Server 用です。MySql を使用する場合は、curdate() を使用する必要があります。他の DB サーバーを使用する場合は、同等の機能を検索する必要があります。

Sql Server では getdate() は日付と時刻を格納するため、日付を "=" と比較すると、同じ日で時刻が異なる場合、異なる可能性があります。

于 2013-10-08T21:39:01.577 に答える
0

コメントの説明のために更新:

現在ログインしているユーザーの場合:

Select 
   u.userid, 
   u.Name, 
   u.FamilyName, 
   u.Position,
   m.Date,
   m.Hour
From
   users u 
      Inner Join (
         Select m1.*
         From movements m1
            Left Outer Join movements m2 on ( m1.userid = m2.userid AND m1.Hour < m2.Hour )
         Where 
            m2.UserId Is NULL and
            m1.Date >= CurDate() ) m on m.userid = u.userid
Where m.Status = 1
于 2013-10-08T21:33:55.390 に答える