0

問題のある SQL クエリとその結果は次のとおりです。 ここに画像の説明を入力

ただし、必要なのは、データを次のようにフォーマットすることです。

Emp No   Sign In                          Sign out
022195   2013-01-29 09:18:00              2013-01-29 19:18:00  
043770   2013-01-29 10:07:00              2013-01-29 17:07:00
4

3 に答える 3

1

そのためにサブクエリを実行する必要はありません。テーブルに対する基本的な集計関数を使用して実行し、名前でグループ化できます

select
     t.name as EmpNo,
     min(t.date) as SignIn,
     max(t.date) as SignOut
from text_based_attendance as t
group by t.name
order by t.name

このクエリにはエイリアス ( ) は必要ありませんがas t、後で結合を簡単に変更および追加できるように、クエリにエイリアスを追加することをお勧めします。

PostgreSQL の場合、日付ごとにグループ化し、各日付の最小値と最大値を取得するには、次のようにします。

select
     t.name as EmpNo,
     t::date as Date,
     min(t.date) as SignIn,
     max(t.date) as SignOut
from text_based_attendance as t
group by t.name, t::date
order by t.name
于 2013-08-16T06:59:26.543 に答える
1

date() 関数を使用して、MySQL で日を集計できます。コツは、group by 句で使用することです。

select name, 
   min(date) as Sign_In,
   max(date) as Sign_Out,
from text_based_attendance 
group by date(date), name
order by name

これにより、従業員を名前と勤務日でグループ化した結果が得られ、サインイン/アウト時間のみが表示されます。

ここに私の SQLFiddle があります: http://sqlfiddle.com/#!2/740e2/1

Orace では、EXTRACT 関数を使用して同じことを行います。

   select name, 
   min(mdate) as Sign_In,
   max(mdate) as Sign_Out
   from text_based_attendance
   group by EXTRACT(day from mdate),name

http://sqlfiddle.com/#!4/96b6c/1

Postgres の場合、Oracle とほぼ同じです。

http://www.postgresql.org/docs/7.4/static/functions-datetime.html

于 2013-08-16T07:26:42.163 に答える
0

私がそれを正しく持っている場合:

select name, 
       min(date) as Sign_In,
       max(date) as Sign_Out
from text_based_attendance 
group by name
于 2013-08-16T06:58:53.873 に答える