1

自分のウェブサイトのレポートを作成していて、さまざまな場所の不動産価格を一覧表示しています。次のような表があります。

CREATE TABLE report(report_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT NOT NULL、
                     場所VARCHAR(255)、
                     日付VARCHAR(255)、
                     ratepersqft INT);

私は以下のような値を表に持っています

 INSERT INTO report(Locations, date, ratepersqft)
             VALUES('Location A', '2012-01-16', 2500),
                   ('Location B', '2012-01-21', 1750),
                   ('Location C', '2012-01-20', 1650),
                   ('Location C', '2012-02-19', 2100),
                   ('Location A', '2012-02-18', 2560),
                   ('Location B', '2012-02-12', 1790),
                   ('Location C', '2012-03-04', 2250),
                   ('Location A', '2012-03-25', 2680),
                   ('Location B', '2012-03-05', 2540),
                   ('Location A', '2012-08-21', 2870),
                   ('Location C', '2012-09-12', 2150),
                   ('Location B', '2012-10-18', 2760);

場所| 月| RatePerSqFt

 Location A     Jan              2500
 Location A     Feb              2560
 Location A     March            2680
 Location A     August           2870
 Location A     sept             2870
 Location A     oct              2870

 Location B     Jan              1750      
 Location B     Feb              1790  
 Location B     March            2540
 Location B     August           2540
 Location B     sept             2540
 Location B     oct              2760    

 Location C     Jan              1650      
 Location C     Feb              2100  
 Location C     March            2250
 Location C     August           2250
 Location C     sept             2250
 Location C     oct              2760

表で利用可能なすべての可能なデータの値をプロットしたいと思います。テーブルロケーションAには10月のエントリがありませんが、ロケーションBには10月のエントリがあるため、ロケーションAの最後に登録された月の8月のレートで出力テーブルにエントリが必要です。

したがって、2870として表示されます。

同様に、ロケーションBには8月のエントリがありませんが、ロケーションAには8月のレートがあるため、ロケーションBを持ってきて、先月のレートである2540を入力します。

Cについても同じです。

上記のクエリまたはプロシージャの記述方法

4

2 に答える 2

0

グループ化はあなたが探しているもののように見えます

SELECT Locations, date_format(date,'%b') as month, sum(ratepersqft) as rates 
FROM report GROUP BY Locations, month(date);

よくわかりませんsum。あるべきavgか何か他のものかもしれません。

于 2012-12-28T07:07:15.443 に答える
0

これがSQLFiddleのデモです

select Locations,year,month,
(select ratepersqft from report where 
        Locations=tl.locations
        and
        DATE_FORMAT(date,'%Y%m')<=tp.monthNum
        order by DATE_FORMAT(date,'%Y%m') desc
        limit 1) as t
       from
(select distinct Locations from report) tl,
(select distinct YEAR(date) year,
                 MONTHName(date) month,
                 DATE_FORMAT(date,'%Y%m') monthNum
                 from report) tp

order by Locations,monthNum
于 2012-12-28T07:38:03.727 に答える