2017-12-03 20 views
0

サンプルプロジェクトでは、日付に基づいて同じ学生のレコードが追加の列に表示されるようにデータを表示したかったのです。私は以下のようなサンプル出力を取得していたクエリ以下のため追加の列に条件付きのmysql値を表示

mysql> desc sch_student;

+----------------+--------------+ 
| Field   | Type   | 
+----------------+--------------+ 
| s_first_name | varchar(128) | 
| s_last_name | varchar(128) | 
| rollcode  | int(8)  | 
| regnum   | int(8)  | 
| in_time  | datetime  | 
| out_time  | datetime  | 
| total_time  | int(8)  | 
+----------------+--------------+ 

、私の予想される出力は、私が取得することができませんものです。サンプル結合を試みましたが、動作しませんでした。

mysql> select * from sch_student; 
    +-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+ 
| s_first_name  | s_last_name | rollcode  | regnum | in_time    | out_time   | total_time  | 
+-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+ 
| Suzan    | Matsuo  | 8900   | 2897  | 2017-12-02 22:30:11 | 2017-12-02 22:30:11 | 00:17:00  | 
| Scottie   | Ogletree  | 5624   | 5627  | 2017-12-02 16:40:01 | 2017-12-02 16:40:05 | 00:26:04  | 
| Cynthia   | Zimmerman  | 3107   | 6348  | 2017-12-02 16:35:01 | 2017-12-02 16:35:01 | 00:59:89  | 
| Ricardo   | Shurtliff  | 3072   | 261  | 2017-12-02 15:33:01 | 2017-12-02 15:33:01 | 00:16:55  | 
| Elizabeth   | Milligan  | 4722   | 3233  | 2017-12-02 15:06:00 | 2017-12-02 15:10:33 | 00:14:33  | 
+-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+ 

の予想される出力は、私は以下のジョインを試み、それが期待される出力を返さないです

+-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+--------------+-----------+---------------------+---------------------+----------------+ 
| s_first_name  | s_last_name |       Today's Meeting            |       Day Before Yesterday's Meeting        | 
|         | rollcode  | regnum | in_time    | out_time   | total_time  | rollcode  | regnum | in_time    | out_time   | total_time  | 
+-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+--------------+-----------+---------------------+---------------------+----------------+ 
| Suzan    | Matsuo  | 8900   | 2897  | 2017-12-02 22:30:11 | 2017-12-02 22:30:11 | 00:17:00  | 8900   | 2897  | 2017-11-30 12:30:11 | 2017-11-30 12:50:11 | 00:17:00  | 
| Scottie   | Ogletree  | 5624   | 5627  | 2017-12-02 16:40:01 | 2017-12-02 16:40:05 | 00:26:04  | 5624   | 5627  | 2017-11-30 18:40:01 | 2017-11-30 19:33:05 | 00:26:04  | 
| Cynthia   | Zimmerman  | 3107   | 6348  | 2017-12-02 16:35:01 | 2017-12-02 16:35:01 | 00:59:89  | 3107   | 6348  | 2017-11-30 13:35:01 | 2017-11-30 14:15:01 | 00:59:89  | 
| Ricardo   | Shurtliff  | 3072   | 261  | 2017-12-02 15:33:01 | 2017-12-02 15:33:01 | 00:16:55  | 3072   | 261  | 2017-11-30 19:33:01 | 2017-11-30 20:33:01 | 00:16:55  | 
| Elizabeth   | Milligan  | 4722   | 3233  | 2017-12-02 15:06:00 | 2017-12-02 15:10:33 | 00:14:33  | 4722   | 3233  | 2017-11-30 18:06:00 | 2017-11-30 19:10:33 | 00:14:33  | 
+-------------------+---------------+--------------+-----------+---------------------+---------------------+----------------+--------------+-----------+---------------------+---------------------+----------------+ 

以下

のようなものです。テーブルから条件付きの列を表示することはできますか?あなたは今日の会議と「日前昨日の」会議のための情報を取得したい場合は

select * from 
(
    (select s_first_name,s_last_name,rollcode,regnum,in_time from sch_student where sch_student.in_time BETWEEN CURDATE()- INTERVAL 1 DAY AND CURDATE()) As TD,  
    (select s_first_name,s_last_name,rollcode,regnum,in_time from sch_student where sch_student.in_time BETWEEN CURDATE()- INTERVAL 3 DAY AND CURDATE()) As DBYS 
) ; 

答えて

0

私はこれがあなたが必要と考えるものです。私はそれをテストしていない。基本的に、クエリは今日のデータLEFTを昨日のデータの前日に結合します。私はregnumとロールコードがプライマリキーを作ると仮定しました。そうでない場合は変更してください。

SELECT TD.* , DBYS.* 
FROM (
    SELECT s_first_name 
     ,s_last_name 
     ,rollcode 
     ,regnum 
     ,in_time 
    FROM sch_student 
    WHERE sch_student.in_time BETWEEN CURDATE() - INTERVAL 1 DAY 
      AND CURDATE()) AS TD 
LEFT JOIN (
    SELECT s_first_name 
     ,s_last_name 
     ,rollcode 
     ,regnum 
     ,in_time 
    FROM sch_student 
    WHERE sch_student.in_time BETWEEN CURDATE() - INTERVAL 3 DAY 
      AND CURDATE() - INTERVAL 2 DAY) AS DBYS 
ON (TD.regnum = DBYS.regnum AND 
    TD.rollcode = DBYS.rollcode); 
0

、LEFTを使用してみてください代わりに登録しよう:

SELECT s_first_name, s_last_name, rollcode, regnum, in_time 
FROM sch_student AS sch_today 
LEFT JOIN sch_student AS sch_daybeforeyesterday ON 
    sch_today.<PK_FIELD> = sch_daybeforeyesterday.<PK_FIELD> AND 
    sch_daybeforeyesterday.in_time BETWEEN CURDATE()- INTERVAL 3 DAY AND CURDATE() - INTERVAL 2 DAY 
WHERE sch_student.in_time BETWEEN CURDATE()- INTERVAL 1 DAY AND CURDATE() 

これはあなたとすべての行を与えます最後の0〜24時間以内に "in_time"これらの行のそれぞれに対して、48〜72時間以内に "in_time"の対応する行が戻されます。