0

以下のサンプルデータを考えると、1分ごとに1行だけをフェッチするにはどうすればよいtimeですか?

次に、次のような条件を作成する必要があります。

SELECT IF (`Flag` IS NOT NULL,
           [fetch flag row],
           [otherwise fetch one row from that minute]);

サンプルデータ

ID  Rate    Flag        time 
1   68.65    null       2012-04-18 10.00.01
2   68.63    null       2012-04-18 10.00.11
3   68.68    null       2012-04-18 10.00.21
4   68.70    null       2012-04-18 10.00.31
5   68.71    null       2012-04-18 10.00.41
6   68.60    null       2012-04-18 10.00.51
7   68.64    null       2012-04-18 10.01.01
8   68.75    null       2012-04-18 10.01.11
9   68.72    1          2012-04-18 10.01.21
10  68.63    null       2012-04-18 10.01.31
11  68.62    null       2012-04-18 10.01.41
12  68.60    null       2012-04-18 10.01.51

Expected Output
1   68.65    null       2012-04-18 10.00.01
9   68.72    1          2012-04-18 10.01.21

これは私がこれまでに得たものです:

SELECT FLAG as signal, DATE_FORMAT(TIME, '%Y-%m-%d %H:%i') as time, RATE as rate
       FROM RATES WHERE (FLAG!='' || (DATE_FORMAT(TIME, '%s')>50 ))
   GROUP BY time
   ORDER BY time DESC,FLAG DESC;
4

1 に答える 1

0

あなたの問題は次のように説明できます:同じ分でグループ化された行のすべてのセットで最大フラグを持つ行を見つけ、複数の行に同じフラグがある場合はいずれかを選択します。したがって、クエリは次のようになります。

SELECT r.id, r.rate, rg.flag, rg.minute
FROM
  ( SELECT MAX(flag) as flag , DATE_FORMAT(`TIME`, '%Y-%m-%d %H:%i') as minute
     FROM RATES
     GROUP BY minute ) rg
JOIN RATES r
ON r.id =(SELECT ru.id FROM RATES ru
          WHERE ru.flag <=> rg.flag
          AND ru.time BETWEEN CONCAT(rg.minute,':00') AND CONCAT(rg.minute,':59')
          LIMIT 1)
于 2012-04-18T01:27:31.830 に答える