0

データベースに TIMEOUT を挿入する前に、対応するタイムインを更新したい

      where timeIN.id = timeOUT.id

マージの 1 つの成功シナリオは次のとおりです。

      when date.timeIN = date.timeOUT   (just like UID = 3)

2 番目のシナリオは、問題が発生しています

      when date.timeIN != date.timeOUt  ( i want to merge UID = 1 and UID = 2)

日付が等しくないため、クエリの基礎として日付を使用できません。date.timeIN が 1 日追加されたときにクエリを実行することはできますか?

例:

----------------------------------------------------------------------------
| UID |    EID   |       date            |     IN      |    OUT    |  CLASS
----------------------------------------------------------------------------
|  1  |   X001   |  2013-06-03 18:00:00  |   6:00 PM   |           |   IN
|  2  |   X001   |  2013-07-03 05:58:00  |             |  5:58 AM  |   OUT
|  3  |   X002   |  2013-06-03 07:30:00  |   7:30 AM   |  6:00 PM  |   

これのアルゴリズムは何ですか..または、それがどのように行われるかについてのヒントを教えてください。vb.net を使用しています。

編集:2行目のタイムアウト値を使用して、最初の行のタイムアウトを更新したいだけですか? vb と mysql でこれを行うにはどうすればよいですか?

----------------------------------------------------------------------------
| UID |    EID   |       date            |     IN      |    OUT    |  CLASS
----------------------------------------------------------------------------
|  1  |   X001   |  2013-06-03 18:00:00  |   6:00 PM   |  5:58 AM  |   
4

1 に答える 1

0

あなたの編集を考えると、これは with を使用GROUP BYMIN()て UID と DateMAX()を取得し、IN 列と OUT 列を取得するために機能するはずです。

select
  min(uid) uid,
  eid, 
  min(date) date, 
  max(`in`) `in`, 
  max(`out`) `out`
from yourtable
group by eid

MIN(日付) の選択は、探しているものである場合とそうでない場合があります。これは、MIN(日付) が対応する IN レコードと一致することを前提としています (IN は OUT の前に来ます)。

于 2013-06-05T03:30:07.577 に答える