I次のクエリがあります。部分的に重複したデータのうち、優先列を選択してください
select
mb.id as meter_id
,ds.mydate as mydate
,mb.name as metergroup
,sum(ms.stand) as measured_cum_value
,me.name as energy_medium
,e.name as unit_of_measure
,min(ms.source) as source
,count(*) as debugcount
FROM datumselect ds <<-- mem table with dates to query.
INNER JOIN metergroup mb ON (mb.building_id = 1)
INNER JOIN meter m ON (m.metergroup_id = mb.id) <<-- meters are grouped
INNER JOIN medium me ON (me.id = mb.medium_id) <<-- lookuptables for normalization
INNER JOIN unit e ON (e.id = mb.unit_id) <<-- ditto
INNER JOIN meterstand ms ON (ms.meter_id = m.id AND ms.mydate = ds.mydate)
group by ds.mydate, mb.id, ms.source <<-- this is prob. broken.
having source = MIN(ms.source) <<-- this `having` does not work !
ORDER BY mb.id, ds.mydate
私は、次の表から選択しています:
CREATE TABLE meterstand(
id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
meter_id INT(11) UNSIGNED NOT NULL,
mydate DATETIME NOT NULL,
stand DECIMAL(16, 5) NOT NULL,
source ENUM('calculated', 'read', 'manual') NOT NULL DEFAULT 'read',
PRIMARY KEY (id),
INDEX FK_meterstand_meter_id (meter_id),
UNIQUE INDEX UK_meterstand (datum, meter_id, bron),
CONSTRAINT FK_meterstand_meter_id FOREIGN KEY (meter_id)
REFERENCES vaanstermeters.meter (id) ON DELETE RESTRICT ON UPDATE CASCADE
)
ENGINE = INNODB
AUTO_INCREMENT = 181
AVG_ROW_LENGTH = 105
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
以下のデータは以下のようになり与えられた単純なクエリを:現在のデータを考えるとdebugcount
SELECT
meter_id
, mydate
, sum(stand)
, count(*) as debugcount
FROM meterstand
WHERE mydate IN (list_of_dates_im_interested_in)
GROUP BY meter_id, my_date
HAVING the_best(source)
は1常にする必要がありますが、複数のメーターが存在する場合上記のクエリのグループ内のグループdebugcount
は、グループ内のメーターの数である必要があります。
私はさまざまな情報源から値を選択することができますが、私は持っています:
- manual
ソース、これは黄金です。
- read
データソースのソース、建物のメーター、
- calculated
データは、欠落したデータを補うために補間されます。
mt_id + mydateのデータポイントは、複数のソースを持つことができます。
クエリはmanual
のソースをread
以上にし、他のデータがない場合はcalculated
のデータのみを選択する必要があります。ここで
はmeterstand
内のデータのサンプルです:
id meter_id mydate stand source
------------------------------------------------------
179 6 1-12-2010 94,75886 calculated
180 7 1-12-2010 256,02618 calculated
164 7 1-1-2011 285,41800 manual <<--- Query should only consider this row.
183 7 1-1-2011 0,00000 read <<-- and forget about this one
最高のデータ・ポイントを選択するために使用する適切なクエリ構文は何ですか?
シンプルなので、私は思いやりのある複雑なものに詰まっていたと思います。ありがとう。 – Johan