1

約 1 時間ごとに変化する通貨相場のグループがあります。この特定の例の sql の結果については、yyyy-mm-dd 形式で、過去 30 日間の各日の最後の利用可能なレコードのみが必要です。

これは私の現在のクエリです:

SELECT value, DATE(date_quotation) as date_q
FROM quotation
GROUP BY DATE(date_quotation)
ORDER BY date_q DESC LIMIT 30

これは、x 軸が別々の日を示すヒストグラム チャートに使用されます。quotes テーブルには、次の列があります。

  • id_quotation (INT)
  • date_quotation (DATETIME)
  • 値 (10 進数)

問題は、必ずしもその日の最後の記録をもたらすとは限らないことです。レコードを日ごとにグループ化していますが、時/分/秒が最も高いものを表示する必要があります。何か案は?ありがとう!

4

1 に答える 1

2

GROUP BYMySQL拡張機能の非標準の動作を利用して、次のことを行うことができます。

SELECT DATE(date_quotation) date_q, value
  FROM
(
  SELECT value, date_quotation
    FROM quotation
   WHERE date_quotation >= CURDATE() - INTERVAL 30 DAY
     AND date_quotation <  CURDATE() + INTERVAL 1 DAY
   ORDER BY date_quotation DESC
) q
  GROUP BY DATE(date_quotation)

date_quotationまたは、 1 日あたりの最大値を選択して (重複がないことを前提として)quotation書籍でそれを行うことができます(重複がないことを前提としています)。value

SELECT date_q, value
  FROM
(
  SELECT DATE(date_quotation) date_q, MAX(date_quotation) date_quotation
    FROM quotation
   WHERE date_quotation >= CURDATE() - INTERVAL 30 DAY
     AND date_quotation <  CURDATE() + INTERVAL 1 DAY
   GROUP BY DATE(date_quotation)
) t JOIN quotation q 
    ON t.date_quotation = q.date_quotation

注: 両方のクエリは、インデックスに適した方法を使用して日付期間をフィルター処理します。date_quotation列にインデックスがあることを確認してください。

これがSQLFiddleのデモです

于 2014-02-16T06:02:50.347 に答える