2016-04-23 11 views
0

I以下のSQLデータベースがあります。テーブル名を私は現在の年の表示=「1」との使用のために合計ポイントを引っ張るために、このデータベースを使用現在のところSQL年度の合計とも設定期間

date  fname surname  points display 
2015-08-08 John Lennon  5  1 
2015-08-16 Ringo Starr  2  1 
2015-08-24 Paul McCartney 3  1 
2015-10-07 George Harrison 1  1 
2015-10-15 John Lennon  3  1 
2015-10-23 Ringo Starr  5  1 
2015-12-07 George Harrison 1  1 
2015-12-14 Ringo Starr  5  1 
2015-12-22 George Harrison 3  1 
2016-02-03 Paul McCartney 4  1 
2016-02-13 John Lennon  5  1 
2016-02-20 Paul McCartney 1  1 
2016-04-04 Ringo Starr  2  1 
2016-04-09 George Harrison 2  1 
2016-04-20 John Lennon  5  1 

次のコード:

SELECT id, fname, surname, points, CONCAT(surname,forename) 'fullname', SUM(points) AS total_points 
FROM tablename 
WHERE date >= '2016-01-01' AND display ='1' 
GROUP BY fname, surname 
ORDER BY total_points DESC, surname ASC, forename ASC 

しかし、私は過去15日間のポイントを与える結果に余分なデータを追加したいと思います。

SELECT id, fname, surname, points, CONCAT(surname,forename) 'fullname', SUM(points) AS fifteenday_points 
FROM tablename 
WHERE date >= '2016-04-08' AND display ='1' 
GROUP BY fname, surname 
ORDER BY total_points DESC, surname ASC, forename ASC 

これをどうすればいいですか?何らかの結合を使用する必要がありますか?もしそうなら、異なるWHEREステートメントのためにどこから始めるのですか?または、私がfifteenday_pointsデータを返すことを可能にする最初のクエリに加えることができる簡単な追加がありますか?

答えて

1

あなたはこの方法でそれらに参加することができます。

SELECT fname, surname, CONCAT(surname,fname) AS fullname, SUM(points) AS total_points, fifteenday_points 
FROM tablename JOIN (
    SELECT CONCAT(surname,forename) 'fullname', SUM(points) AS fifteenday_points 
    FROM tablename 
    WHERE date >= NOW() - INTERVAL 15 DAY AND display ='1' 
    GROUP BY fullname) AS fifteen_days 
    ON tablename.fullname = fifteen_days.fullname 
WHERE YEAR(date) = YEAR(NOW()) AND display ='1' 
GROUP BY fullname 
ORDER BY total_points DESC, fullname ASC 

私も件のデータ正しい道に私を置くためVittoとレトへ

+0

素晴らしい!しかし、あなたは単にフルネームでソートするのはなぜですか? 'ORDER BY total_points DESC、fullname ASC' – Reto

+0

これを試しましたが、次のようになります:#1054 - 'on clause'の 'tablename.fullname'が不明です – teddytash

+0

' CONCAT(姓、名) ASフルネーム ' – Vitto

0
SELECT tablename.fname, tablename.surname, CONCAT(tablename.surname,tablename.fname) AS 'fullname', SUM(points) AS total_points, fifteenday_points 
FROM tablename JOIN (
SELECT tablename.fname, tablename.surname, SUM(points) AS fifteenday_points 
FROM tablename 
WHERE enddate >= NOW() - INTERVAL 15 DAY AND display ='1' 
GROUP BY tablename.surname, tablename.fname) AS fifteen_days 
ON tablename.surname = fifteen_days.surname AND tablename.fname = fifteen_days.fname 
WHERE YEAR(enddate) = YEAR(NOW()) AND display ='1' 
GROUP BY tablename.surname, tablename.fname 
ORDER BY total_points DESC, tablename.surname ASC, tablename.fname ASC; 

おかげで条件を変更しました。