4

クライアント向けのサイトを開発しています。計算を作成するには特別な方法が必要です。テーブルでは、同じ「% End」を持つ行のグループを作成する必要があります。

テーブル

最初 (2011 年 11 月 24 日) に 90% の行が 1 つしかないため、無視します。たとえば、日付のある行を選択する必要があります

2011年11月26日 2011年11月28日 2011年11月29日

そして計算を行い、後で日付を選択します

2011年12月4日 2011年12月5日 2011年12月6日

2011 年 12 月 7 日と 12 月 09 日の行も無視されます。これは、前後に同じパーセントの行がないためです。

等々。

私はそれを行う方法についてかなり迷っています。日付のグループを作成して計算するにはどうすればよいですか? それを行うための簡単で効率的な方法はありますか?

私の「リソース」は、PHP、jQuery、および MySQL です。

どんな助けでも大歓迎です、私は月曜日からこれにこだわっています。

EDIT: テーブルの情報は、ストアド プロシージャによってフェッチされます EDIT2: テーブルは、90% の最終パーサートで開始および終了する必要があります

開始 90%....任意の値...90% 終了

edit3:これは私のストアドプロシージャです( http://pastebin.com/cZM1j72uをよりよく理解するのに役立つかもしれません)

私の問題を解決するには、php、Javascript(jQuery)、または mysql を使用できます

アイデアは、2011 年 12 月 17 日の日付からポケモンの値を取得し、2012 年 12 月 14 日から差し引くことです。

値は、12 月 14 日の「ガロン」値から除算されます。<---それは私が探しているものです。

4

3 に答える 3

3

どのような計算が必要ですか?MySQLの根拠だと思います。例えば:

SELECT percent_end, SUM(cakes) as sumcakes
FROM table
GROUP BY percent_end

これは単にSUM%_END ごとのケーキです。使用してGROUP BYください。

レコードが 1 つしかない %_END が必要ない場合:

SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(date) as date_amount
FROM table
GROUP BY percent_end
HAVING date_amount > 1
于 2012-04-25T21:25:23.677 に答える
1

上記のTosinsの回答を詳しく説明すると、次のような手順に従って、単一の日付エントリで計算することを回避できます。

SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(DISTINCT(date)) as date_amount
FROM table
WHERE date_amount > 1
GROUP BY percent_end

この場合、2 つ以上の異なる日付範囲がない限り、レコードは返されません。ただし、より複雑な日付比較関数が必要な場合、SQL は非常に複雑に見え始めます。たとえば、同じパーセントの記録の前または後の日付が「x」日前または「x」日後かどうかを確認する必要がある場合、それはまったく新しい球技になります。より複雑な計算の場合、個人的には、PHP 配列を操作し、さまざまなソートおよび省略関数を実行することに頼っています。多くの人が私に同意しないかもしれませんが、火星からのもののように見える面倒な SQL クエリを作成するのに何日も費やすことがあります。

*編集*上記の例で恐ろしい間違いに気づきました! もちろん機能しません。where句でdate_amountを使用しましたが、date_amountはASフィールドでした。つまり、実際の列名ではありませんでした。SQL は裏返しに評価されるため、AS 句の前に WHERE 句が発生するため、エラーがスローされ、date_mount が存在しないことが通知されます。申し訳ありません。それが誰かを助ける場合に備えて、私はそれを残しています。

ただし、SQL を変更し、HAVING 句を使用して同じ目的の効果を得ることができます。

SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(DISTINCT(date)) as date_amount
FROM table
GROUP BY percent_end
HAVING date_amount > 1
于 2012-04-25T21:52:07.850 に答える
0

何かのようなもの:

for(i=0; i<data.length-1; i++) {
  arr = []
  while(data[i].end_value == data[i+1].end_value) {
    arr.append(data[i].end_value)
    i++;
  }
  arr.append(data[i+1].end_value)
  if(arr.length > 1)
    // Then you've found a group and do the calculation with the values in the array
}

必要な作業に合わせて構文を調整します。おそらく、これをサーバー側で行いたいでしょう。

于 2012-04-25T21:25:13.560 に答える