0

増分値が0.25を超える場合、範囲が葯から分離されている場合、ポイントテーブルから使用可能な範囲を見つけるにはどうすればよいですか(範囲テーブルを生成したいポイントテーブルがあります)

POINTS table
+----+------+------+------------+
| id | sph  |  cyl | othertbl_id|
+----+------+------+------------+
|  1 | 0    | 0    |     1      |
|  2 | 0    | 0.25 |     1      |
|  3 | 0    | 0.50 |     1      |
|  4 | 0    | 1.00 |     1      |
|  5 | 0.25 | 0    |     1      |
|  6 | 0.25 | 0.25 |     1      |
|  7 | 0.25 | 0.50 |     1      |
|  8 | 0.25 | 1.00 |     1      |
|  9 | 3.25 | 0    |     1      |
| 10 | 3.25 | 0.25 |     1      |
| 11 | 3.50 | 0    |     1      |
| 12 | 3.50 | 0.25 |     1      |
| 13 | 3.75 | 0    |     1      |
| 14 | 3.75 | 0.25 |     1      |
+----+-------------+------------+

このような範囲テーブルを生成したい

+----+----------+----------+----------+----------+------------+
| id | min_sph  |  max_sph | min_cyl  |  max_cyl |othertbl_id |
+----+----------+----------+----------+----------+------------+
|  1 | 0        | 0.25     |     0    |  1.00    |      1     |
|  2 | 3.25     | 3.75     |     0    |  0.25    |      1     |
+----+----------+----------+----------+----------+------------+

これをより理解しやすくするための同様のケースシナリオ

前に生成した範囲テーブルは、私が望む結果です。othertbl が製品テーブルであり、各製品がポイントの各範囲で異なる在庫数を持っているとしましょう。T シャツ A が年齢 0 ~ 2、身長 30 ~ で利用可能であるとしましょう。これらの範囲のすべてのポイントは、同じ T シャツの列に対するものです。年齢差が 1 年以上ある場合、または身長差が 10 を超える場合は、新しい範囲と見なされます

この場合、ポイント テーブルは次のようになります。

+----+------+------+------------+
| id | age  |  hgt | othertbl_id|
+----+------+------+------------+
|  1 | 0    | 30   |     1      |
|  2 | 0    | 40   |     1      |
|  3 | 0    | 50   |     1      |
|  4 | 1    | 30   |     1      |
|  5 | 1    | 40   |     1      |
|  6 | 1    | 50   |     1      |
|  7 | 2    | 30   |     1      |
|  8 | 2    | 40   |     1      |
|  9 | 2    | 50   |     1      |
| 10 | 28   | 100  |     1      |
| 11 | 28   | 110  |     1      |
| 12 | 28   | 120  |     1      |
| 13 | 29   | 100  |     1      |
| 14 | 29   | 110  |     1      |
| 14 | 29   | 120  |     1      |
| 14 | 30   | 100  |     1      |
| 14 | 30   | 110  |     1      |
| 14 | 30   | 120  |     1      |
+----+-------------+------------+

そして、範囲テーブルは次のようになります

+----+----------+----------+----------+----------+------------+
| id | min_age  |  max_age | min_hgt  |  max_hgt |othertbl_id |
+----+----------+----------+----------+----------+------------+
|  1 | 0        | 2        |     30   |  50      |      1     |
|  2 | 28       | 30       |     100  |  120     |      1     |
+----+----------+----------+----------+----------+------------+
4

1 に答える 1

0

とにかく、質問はあまり明確ではありません。ここに、目的の結果に非常に近い「何か」を返す1つのバリアントがあります。

select min(id) as id, sph as min_sph, (select min(sph) from points as b where b.sph>a.sph) as max_sph, min(cyl) as min_cyl, max(cyl) as max_cyl, othertbl_id as othertbl_id
from points as a
group by othertable_id, sph

結果は次のとおりです。

id  minsph  maxsph  mincyl  maxcyl  othertable_id
1   0       0.25    0       1       1
5   0.25    3.25    0       1       1
9   3.25    3.5     0       0.25    1
11  3.5     3.75    0       0.25    1
13  3.75    (null)  0       0.25    1
于 2013-11-02T00:47:32.407 に答える