質問

このhthfl queryは、IFNULLを使用して結果セットの後に結果があるかどうかを判断します。結果セットは期間によって決定され、5月5日まで5月10日を参照してください。この期間は、私のアプリケーションでライングラフとして視覚化されます。私は5月5日までの期間の前後の最初の結果があれば(したがってifnullの使用)があれば(したがって)最初の結果がある場合は、Grahpの行は消費に望んでいます。視覚化された期間前に結果がある場合は、その時点から行を描画し、画面上にありませんが、その点から始めて始める必要があります。

視覚的な例の画像を見てください。最初のグラフには、可視化された期間の前後の測定は含まれていません(ボックスは実際にユーザーに表示されるグラフの面積を表します)、表示された期間の前に1つの測定が1つの測定値と同じようにY軸と交差します。その後の

画像の入力ここにある画像の入力

今これまでに良く、私のひどいクエリは機能します。つまり、1つのエンティティの測定値を入手したい場合です。しかし、今度は、パフォーマンスに関して、1つのクエリ内の一連のエンティティに対してこの結果を取得したいと思います。一度質問を1回、entity= 200回のクエリよりも200台のエンティティから測定値を取得します。だから私はWHERE Entity.Id=1からWHERE Entity.Id IN (1, 2, 3, 4)へのクエリを変更しました。現在の問題は、グラフの前後の測定値を含む期間が一般化され、エンティティおよびその測定値ごとに評価されない。

下記は、エンティティごとに機能するクエリ(私の特定のケースの牛)

です。
SELECT 
    *
FROM
    `measurements`
WHERE
    `CowId` = 23 AND `CellCount` >= 0
        AND (`Date` BETWEEN IFNULL((SELECT 
                    MAX(`Date`)
                FROM
                    `measurements`
                WHERE
                    `CowId` = 23
                        AND `Date` < '2014-03-28 00:00:00'),
            '2014-03-28 00:00:00') AND IFNULL((SELECT 
                    MIN(`Date`)
                FROM
                    `measurements`
                WHERE
                    `CowId` = 23
                        AND `Date` > '2014-04-11 23:59:59'),
            '2014-04-11 23:59:59'))
ORDER BY `CowId` ASC , `Date` ASC
.

とここに、すべての牛とその測定値を1つのクエリでクエリする試みが

SELECT 
    *
FROM
    `measurements`
WHERE
    `CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
        AND `CellCount` >= 0
        AND (`Date` BETWEEN IFNULL((SELECT 
                    MAX(`Date`)
                FROM
                    `measurements`
                WHERE
                    `CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
                        AND `Date` < '2014-03-28 00:00:00'),
            '2014-03-28 00:00:00') AND IFNULL((SELECT 
                    MIN(`Date`)
                FROM
                    `measurements`
                WHERE
                    `CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
                        AND `Date` > '2014-04-11 23:59:59'),
            '2014-04-11 23:59:59'))
ORDER BY `CowId` ASC , `Date` ASC
.

オハイカ、私がここに投稿したひどい探しの質問は何ですか。うまくいけば私は自分自身を明確にしました。 ありがとう!

役に立ちましたか?

解決

副照会では、メインクエリのaudに接続してください... クエリは次のようになります。

SELECT 
    *
FROM
  `measurements` `m1`
  WHERE
      `m1`.`CowId` IN (23 , 22, 19, 18, 17, 16, 15, 20, 21, 14)
    AND `m1`.`CellCount` >= 0
    AND (`m1`.`Date` BETWEEN IFNULL((SELECT 
                MAX( `m2`.`Date`)
            FROM
                `measurements` `m2`
            WHERE
               `m2`.`CowId` =  `m1`.`CowId`
                    AND `m2`.`Date` < '2014-03-28 00:00:00'),
        '2014-03-28 00:00:00') AND IFNULL((SELECT 
                MIN( `m3`.`Date`)
            FROM
                `measurements` `m3`
            WHERE
                `m3`.`CowId` =  `m1`.`CowId`
                    AND  `m3`.`Date` > '2014-04-11 23:59:59'),
        '2014-04-11 23:59:59'))
  ORDER BY  `m1`.`CowId` ASC ,`m1`.`Date` ASC
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top