4

次の 5 分、10 分、30 分などでテーブルから最大要素を選択したいのですが、where 句に複数の要素があると、これは不可能だと思います。通常<と両方を使用する</:と失敗します。以下の私のコード/クエリ:

`select max price from dat where time</: (09:05:00; 09:10:00; 09:30:00)`

ここで何が間違っているのですか?アイデアは、テーブル全体の 3 つの最大価格だけでなく、その行の次の 5、10、30 分の時間内に各行の最大価格を取得することです。

select max price from dat where time</: time+\:(5 10 30)

これは機能しませんが、一般的なアイデアを提供する必要があります。

さらに明確にするために、テーブルの各行の時間[i]から5、10、30分間隔で最大価格を計算したいと思います。したがって、各テーブル行の x+5、x+10、x+30 分以内の最大価格 (x はその行の時間エントリ)。

4

3 に答える 3

0

次のようなことを試すことができます:

select c1:max price[where time <09:05:00],c2:max price[where time <09:10:00],c3:max price from dat where time< 09:30:00

このクエリは、好きなようにパラメーター化できます。したがって、時間のリストがある場合、 l:09:05:00 09:10:00 09:15:00 09:20:00 ...上記のクエリの機能的な形式を使用して機能する関数を作成できますl の異なる長さ、次のようなもの:

q)f:{[t]?[dat;enlist (<;`time;max t);0b;(`$"c",/:string til count t)!flip (max;flip (`price;flip (where;((<),/:`time,/:t))))]}
q)f l

f を拡張して、max の代わりに別の関数を使用したり、別のテーブルで作業したりすることができます。

于 2013-06-21T13:02:14.280 に答える
0

これは機能しますが、多くの時間がかかります。20,000 レコードの場合、約 20 秒、多すぎます!. 速くする方法は何でも

 dat: update tmlst: time+\:mtf*60 from dat;
 dat[`pxs]: {[x;y] {[x; ts] raze flip raze {[x;y] select min price from x where time<y}[x] each ts }[x; y`tmlst]} [dat] each dat;
于 2013-06-22T07:00:16.767 に答える