これに対するクエリを作成するにはどうすればよいですか? 私は SQL でこれだけ複雑なクエリを書く専門家ではありません。ここで入札 3、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 に答える