1

私はこのように仮定されたテーブルを持っています

[表 a]
UID | うなめ
------------------
001 | 002
| b003
| c

[表 b]
UID | ログ
----------------------
001 | 2009/08/01
001 | 2009/08/03
003 | 2009/08/02


このUIDのようなクエリが必要です| 最後のログ
--------------------
001 | 2009/08/03
002 | NULL
003 | 2009/08/02

その結果、私はすでにそれを行っていますが、フィルターlastloginを追加したいときに問題に直面しました.'2009/08/03'より前にlastloginを持つすべてのユーザーを表示するフィルターを入力した場合、このような結果が必要です

UID | 最後のログ
--------------------
003 | 2009/08/02 2009/08/03

に 001 に lastlogin があるため、UID 001 を削除し ます。

このような SQL コマンドを使用します

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
where max(logs.date)<'2009/08/03'
group by a.uid

2009/08/03 より前の max(logs.date) のみを表示するフィルターを追加する方法

4

3 に答える 3

5

これを試して:

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
group by a.uid
having max(logs.date)<'2009/08/03'
于 2009-08-24T01:24:59.693 に答える
3

グループ化関数を使用する条件は、次のHAVINGように句に入れる必要があります。

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
GROUP BY a.uid
HAVING MAX(logs.date)<'2009/08/03'
于 2009-08-24T01:25:45.747 に答える
3

SQL の「having」句を使用したい場合:

SELECT a.uid, max(logs.date)
FROM user a LEFT JOIN logs ON (a.uid = logs.uid)
group by a.uid
having max(logs.date) < '2009/08/03'

集約関数の値をテストするには、「where」ではなく「having」を使用する必要があります。

于 2009-08-24T01:25:56.760 に答える