0

内部結合を使用してクエリを実行する 2 つのテーブルがあります。

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

2 つの日付の間のレポートのエントリの ID をカウントします。テーブル 1 にはレポートに関する情報 (日付、グループ ID など) が保持され、テーブル 2 にはレポートに関するエントリが保持されます。

2 つの日付のうち、最新の日付のレポートから ID のみを選択することを除いて、ほぼ同じクエリを作成したいと思います。

誰でも助けることができますか?MAX(date) タイプのクエリについてはよく理解できません。返されるのは、最大日付の ID だけではなく、すべての ID と最大日付のカウントだけです。

ありがとう、


おそらくネストされた SQL クエリを考えていましたが、できますか? Googleで参照を見つけることができますが、機能させることができません...次のようなもの:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

ただし、それを機能させることはできません.phpMyAdminでテストしようとすると、ユーザーにSELECT権限がないことを示すエラーが表示されます. これはルートとしてログインしているテストサーバーであるため、奇妙なことです。

4

2 に答える 2

0

テーブルの構造に関する詳細情報がなければ、次のようなことを試すことをお勧めします。

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

私はこれをテストしていませんが、この問題で進むことができる 1 つの方向を示しているはずです。サブクエリを使用するという他の提案は有効であり、次のように機能する可能性があります。

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

または、一時テーブルへの結合で:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id
于 2009-04-19T17:32:55.920 に答える
-1
 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

日付を含む最初の10行を取得します

于 2009-04-19T16:41:25.873 に答える