最後にgameDate、todays(存在する場合)、および次のgameDateを指定した行を選択しようとしています。 。 - awayTeamまたはhomeTeam最後のレコードを日付別に取得する2種類の異なるIDを取得する
awayTeam homeTeam gameDate
1 2 5/12/16
2 3 5/13/16
3 5 5/14/16
2 4 5/14/16
私が直面しています問題はteamIDが2列に表示されることができるということです。それは次のようにある構造です。私はgroup by節を持つ多くのソリューションを見ていましたが、それはたった1つの列でしか動作しないようです。各チームの最後のgameDateに対応する行を取得したいと思います。例えば、(1,5)が返されます:
awayTeam homeTeam gameDate
1 2 5/12/15
3 5 5/14/16
私は、最新のゲームをしたいので、今日から任意のゲーム、そして次のゲームは、私はこの問題を解決する最良の方法は、最初に取得することになります考えていました過去の行、次に今日の行を含むUNION ALL、次のゲームのUNION ALL。この表は小さく、約3,000行しかありません。私は以下のクエリを持っていますが、それはhomeTeamでのみ機能し、awayTeamには表示されません。また、以下のクエリは2.2秒かかるので、このような少数の行を持つテーブルの場合は非常に高いと思われます。
SELECT g . *
FROM games g
WHERE g.gameDate = (
SELECT MAX(g2.gameDate)
FROM games g2
WHERE g2.homeTeam = g.homeTeam
AND gameDate < NOW()
AND g.homeTeam
IN (1, 5))
ORDER BY g.gameDate DESC
私は関係なく、彼らはhomeTeamまたはawayTeam列に表示されるかどうかに、私は簡単にチームが果たしてきた最後の時間を得ることができるので、おそらくビューにこれを分割することについて考えたが、それはやり過ぎのように思えます。これはMySQL用です。御時間ありがとうございます。
私はあなたのソリューションが近いと思いますが、それは非常に適切ではありません。別の行にINSERT INTO YourTable VALUES(1,4、 '2016-05-15');を追加してSQL Fiddle Demoを変更すると、3行が返されることがわかります。 1と5は、私が提供した例で一度しか表示されないので、あなたのソリューションは動作していると思います。 –
@JustinPfenning答えを変更し、別の条件をJOINに追加しました。私は当初の日付に参加するのを忘れていました。 – SQLChao