質問

私はそれらを照会するために内部結合を使用して、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のまわりで私の頭を取得することはできません(日付)のクエリを入力する - 私は戻って取得すべては、すべての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権限を持っていない私に言ってエラーで私を蹴ります。奇妙な、ので、これは私がルートとしてにログインしていたテストサーバーです。

役に立ちましたか?

解決

テーブルの構造に関する更なる情報がなければ、私はあなたがこのような何かを試すことをお勧めします:

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)

私はこれをテストしていませんが、それはあなたがこの問題に行くことができる一つの方向にポイントする必要があります。サブクエリを使用してのあなたの他の提案が有効であり、このような何かを働くかもしれません。

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

他のヒント

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

あなたの日付と10の最初の行を取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top