2016-10-27 23 views
1
SELECT barcode, t3.employee, 
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, dateandtime, (SELECT IFNULL(MIN(dateandtime),NOW()) 
                FROM wwtlog b 
               WHERE b.barcode = a.barcode 
                AND b.dateandtime > a.dateandtime 
                AND b.inorout = 'IN' 
               )))) timeused 
FROM wwtlog a 
    JOIN (SELECT t1.barcode, t1.employee FROM wwtlog t1 
    JOIN (SELECT barcode, MAX(id) id FROM wwtlog GROUP BY barcode) t2 
ON t1.id = t2.id AND t1.barcode = t2.barcode) t3 ON t1.barcode = barcode 
WHERE inorout = 'OUT' and barcode IN (SELECT t1.barcode FROM wwtlog t1 
           JOIN (SELECT barcode, MAX(dateandtime) dateandtime FROM wwtlog GROUP BY barcode) t2 
           ON t1.barcode = t2.barcode AND t1.dateandtime = t2.dateandtime WHERE inorout = 'IN') 
GROUP BY barcode; 

これについての助けがあれば素晴らしいですが、私はt3.employeeを取得するために結合を追加したときにこれを手に入れました。私は自分が何をしているのか分からないと感じています。フィールドリストの 'barcode'列が曖昧です

一意のバーコードを取得しようとしていますが、時刻INと時刻OUTのタイムスタンプの合計時間があります。私は、最後にアイテム(バーコード)をチェックアウトした従業員を取得するために結合を使用しようとしていました。あなたがt3.employeeの参加を取り除き、従業員を尋ねると、バーコード、最後のものではありません。

+0

2番目の参照で参照されるサブクエリのエイリアスを指定する必要があります。このサブクエリの別名は、ここでは 'barcode' ... t3 ON t1.barcode = barcode ....';私は 't3'を推測している。 ....また、上部のSELECTとメインクエリのWHEREにあります。 – Uueerdo

+0

他の場所と同様にあいまいさを取り除きます – Strawberry

答えて

0

メインテーブルの例で

SELECT a.barcode, t3.employee, 
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, dateandtime, (SELECT IFNULL(MIN(dateandtime),NOW()) 
                FROM wwtlog b 
               WHERE b.barcode = a.barcode 
                AND b.dateandtime > a.dateandtime 
                AND b.inorout = 'IN' 
               )))) timeused 
FROM wwtlog a 
    JOIN (SELECT t1.barcode, t1.employee FROM wwtlog t1 
    JOIN (SELECT barcode, MAX(id) id FROM wwtlog GROUP BY barcode) t2 
ON t1.id = t2.id AND t1.barcode = t2.barcode) t3 ON t1.barcode = a.barcode 
WHERE inorout = 'OUT' and a.barcode IN (SELECT t1.barcode FROM wwtlog t1 
           JOIN (SELECT barcode, MAX(dateandtime) dateandtime FROM wwtlog GROUP BY barcode) t2 
           ON t1.barcode = t2.barcode AND t1.dateandtime = t2.dateandtime WHERE inorout = 'IN') 
GROUP BY a.barcode; 

expecially各バーコード列arをテーブルの別名を割り当ててみてくださいあなたは、列のバーコードを使用しているが、この列は、いくつかのテーブルに存在している:あなたがしている

0

をwwtlog ON t1.barcode = barcodeにテーブル参照がありません。バーコード列は複数の表にあるので、あいまいでないように厳密に識別する必要があります。