2016-08-08 2 views
0

これは私のクエリではなく、誰かが私が現在作業しているクエリです。Mysqlクエリの異常

私はこれはこれは、そのデータベースから行を選択している私のクエリ

SELECT x.date, t.high, t.low, t.open, t.close, x.open_id, x.close_id from (SELECT MIN(`date`) as `date`, MAX(`close_id`) as `close_id`, MIN(`open_id`) as `open_id` 
FROM `AUDNZD_minutes` 
WHERE `date` >= '2011-03-07 00:00:00' and `date` < '2011-03-11 12:00:00' 
GROUP BY round(UNIX_TIMESTAMP(date)/600) order by `date`) as x inner join `AUDNZD_minutes` as t on x.close_id = t.close_id 

ある

(これはおよそ20万行のうち12である)ので、

id date    high  low   open  close  open_id  close_id 

1 2009-05-01 00:00:00 0.729125 0.729225 0.72889  0.72889  1   74 
2 2009-05-01 00:01:00 0.72888  0.728895 0.72883  0.72887  75   98 
3 2009-05-01 00:02:00 0.728865 0.72889  0.72881  0.72888  99   121 
4 2009-05-01 00:03:00 0.72891  0.72901  0.72891  0.729  122   141 
5 2009-05-01 00:04:00 0.728975 0.729115 0.728745 0.72878  142   225 
6 2009-05-01 00:05:00 0.728785 0.72882  0.72867  0.72882  226   271 
7 2009-05-01 00:06:00 0.72884  0.72887  0.728735 0.728785 272   293 
8 2009-05-01 00:07:00 0.728775 0.728835 0.72871  0.728835 294   317 
9 2009-05-01 00:08:00 0.728825 0.72899  0.728795 0.72897  318   338 
10 2009-05-01 00:09:00 0.72898  0.729255 0.72898  0.72922  339   383 
11 2009-05-01 00:10:00 0.72922  0.729325 0.72908  0.729105 384   437 
12 2009-05-01 00:11:00 0.729115 0.72918  0.728635 0.72905  438   553 

のようなデータベースを持っています10分間隔で。しかし、私はいつもこの異常を持っています。

2011-03-07 00:00:00 1.3761  1.375595 1.375815 1.37589  55180489 55181083 
2011-03-07 00:05:00 1.376055 1.37568  1.375925 1.37594  55181084 55181751 
2011-03-07 00:15:00 1.37609  1.375835 1.375835 1.37606  55181752 55182003 
2011-03-07 00:25:00 1.37578  1.37526  1.375505 1.375555 55182004 55182615 
2011-03-07 00:35:00 1.374645 1.374455 1.374535 1.374645 55182616 55183178 
2011-03-07 00:45:00 1.37463  1.373775 1.374085 1.374025 55183179 55183820 

最初の行と2番目の間の差異は5分で、その後の差異は10分であることがわかります。これは私が試したどんな間隔でも起こります。例えば

、20のmiunte間隔

2011-03-07 00:00:00 1.376155 1.375915 1.37594  1.376025 55180489 55181434 
2011-03-07 00:10:00 1.376105 1.37592  1.37593  1.376085 55181435 55182273 
2011-03-07 00:30:00 1.374025 1.37388  1.373965 1.37401  55182274 55183429 
2011-03-07 00:50:00 1.373895 1.373595 1.37365  1.373595 55183430 55184894 
2011-03-07 01:10:00 1.37382  1.373505 1.37373  1.373715 55184895 55185885 
2011-03-07 01:30:00 1.373305 1.373025 1.373265 1.373055 55185886 55187306 

どのように私はこのクエリを修正することができますか?あなたはおそらく、主に学んだ基本的な数学のルールを使用して

+0

これは、MySQLの精度による丸めの制限だと思います。重複はありませんが、私はこれを前に見たと思います。 –

+0

それはテーブルですか?それらの列ですか?それらの列に名前はありますか? – Strawberry

+0

@Strawberryあなたのために更新されました。 –

答えて

1

round機能ラウンド数:2009-05-01 00:00:00

select FROM_UNIXTIME(round(UNIX_TIMESTAMP('2009-05-01 00:06:00')/600) *600) from dual; 

2009-05-01 00:10:00との結果なので、あなたは常に(提供データセット上の)意志と

select FROM_UNIXTIME(round(UNIX_TIMESTAMP('2009-05-01 00:04:00')/600) *600) from dual; 

結果あなたがそれを使い続けるならば、最初の行の間隔の半分を持っています。

ではなくceilまたはfloor機能を考えてみましょう。

補足として、@Strawberryがポイントを作った。 http://sqlfiddle.com/のようなものを使用して、少なくとも質問にいくつかの努力をしてみてください。

+0

他の機能を試してみるとうまくいけば、この回答を受け入れることができます。 SQLのフィドルリンク、ありがとう、ありがとう。私は現在、サーバへのsshパーミッションを持っていないので、コマンドラインでデータセットを印刷してうまく印刷できませんでした。テキストエディタでタブイングして整列させました。 –

+0

floor()がこの問題を解決しました –

関連する問題