0

代替テキスト

これに対するクエリを作成するにはどうすればよいですか? 私は SQL でこれだけ複雑なクエリを書く専門家ではありません。ここで入札 3、4 について言及するのを忘れていました。

4

4 に答える 4

4

David のクエリに基づいて、重複する入札を排除し、チェックの種類によって制限します。

SELECT
   a.bid, min(a.time) checkin, ISNULL(min(b.time), '') checkout
FROM
   myTable a
LEFT JOIN
   myTable b ON a.bid = b.bid
WHERE
   a.type = "Check In"
   AND
   b.type = "Check Out"
GROUP BY
   a.bid
ORDER BY
   a.time
于 2009-12-11T10:56:50.850 に答える
2
SELECT
   a.bid, a.time checkin, ISNULL(b.time, '') checkout
FROM
   myTable a
LEFT JOIN
   myTable b ON a.bid = b.bid AND b.type = 'Check Out'
WHERE
   a.type = 'Check In'
ORDER BY
   a.time

編集

あなたのコメントに応えて、同じのレコードがいくつかあり、出力bidごとbidに 1 つのレコードのみが必要であるため、出力に必要なレコードを指定する必要があります。複数ある場合、どの値を選択するかをどのように決定しますか? 常に最も早いチェックインと最新のチェックアウトが必要な場合は、次のようにします。

SELECT
    a.bid,
    MIN(a.time) checkin,
    ISNULL((SELECT
              MAX(time)
           FROM
              myTable
           WHERE
              bid = a.bid
              AND type = 'Check Out'), '') checkout
FROM
    myTable a
WHERE
    a.type = 'Check In'
GROUP BY
    a.bid

それがまさにあなたが望むものではない場合。MINの使用を調整してMAX、ニーズに合わせます。

于 2009-12-11T10:48:04.890 に答える
1

これにより、各入札 ID の最小チェックイン時間とチェックアウト時間がわかります。

select bid, 
(select min(time) from table b where a.bid = b.bid and type = "Check In") as CheckIn,
(select min(time) from table c where a.bid = c.bid and type = "Check Out") as CheckOut
from table c
group by c.bid
于 2009-12-11T10:51:18.773 に答える
0

私はあなたがこのようなものを探していると思います:

SELECT 
    `bid`, 
    MAX(IF(`type` = 'Check In', `time`, NULL)) AS `CheckIn`, 
    MAX(IF(`type` = 'Check Out', `time`, NULL)) AS `CheckOut` 
FROM `yourtable` 
GROUP BY `bid`
于 2009-12-11T10:56:38.620 に答える