1

データを取得するテーブルがあります。このデータには、日付と銘柄記号があります。同じ日付で異なる銘柄記号を持つ複数のデータ行が存在する可能性があります。同じ日付のすべての行の累計が得られるように、テーブルを更新する必要があります。新しい日付が発生すると、累積カウントは 1 にリセットされてから再開されます。

典型的なクエリ:

mysql> SELECT Sym 'sym' ,  fdate as 'FilledDate',  TsTradeNum 'numT'
-> FROM trades_entered_b2
-> WHERE fDate >= '2009-08-03' AND fDate <= '2009-08-07'
-> LIMIT 10;


+------+------------+------+
| sym  | FilledDate | numT |
+------+------------+------+
| WAT   | 2009-08-03 |    0 |
| ALGN  | 2009-08-04 |    0 |
| POT   | 2009-08-05 |    0 |
| PTR   | 2009-08-06 |    0 |
| SCHW  | 2009-08-06 |    0 |
| FDO   | 2009-08-07 |    0 |
| NBL   | 2009-08-07 |    0 |
| RRC   | 2009-08-07 |    0 |
| WAT   | 2009-08-08 |    0 |
| COCO  | 2009-08-08 |    0 |
+------+------------+------+

私が欲しいもの:

+------+------------+------+
| sym  | FilledDate | numT |
+------+------------+------+
| WAT   | 2009-08-03 |    1 |
| ALGN  | 2009-08-04 |    1 |
| POT   | 2009-08-05 |    1 |
| PTR   | 2009-08-06 |    1 |
| SCHW  | 2009-08-06 |    2 |
| FDO   | 2009-08-07 |    3 |
| NBL   | 2009-08-07 |    4 |
| RRC   | 2009-08-07 |    5 |
| WAT   | 2009-08-08 |    1 |
| COCO  | 2009-08-08 |    2 |
+------+------------+------+

TsTradeNum 列を正しい値で更新する必要があります。関数を作成しようとしましたが、さまざまなクエリがすべて失敗しました。

何か案は?前もって感謝します

4

1 に答える 1

0

以下を試すことができます。前の行の日付が現在の行と同じ場合、クエリは numT を 1 増やします。そうでない場合、numT を 1 にリセットします。

SELECT sym, FilledDate, numT  
FROM(
SELECT sym, FilledDate,
   @count:=CASE WHEN ( @date <> FilledDate) THEN 1 
                ELSE 
                    @count+1                     
                END AS numT,
    @date:=FilledDate as dlset        
FROM
(SELECT @count:= -1) s,
(SELECT @date:= -1) d,    
  (SELECT id, sym, FilledDate
   FROM mytable3  
   ORDER BY FilledDate,sym desc        
  ) t ) a 
于 2012-06-20T03:13:19.097 に答える