striker_2k
Neuer Benutzer
- Beiträge
- 3
Hallo zusammen,
Ich habe eine Tabelle mit Zählerständen, die ich 1x die Woche eingebe. Die Zähler haben eigene IDs und ich habe eine Abfrage die mir alle Zähler nebeneinander aus der selben Tabelle anzeigt (sortiert nach Woche).
Dabei wird auch gleich die Differenz zw. den Wochen ausgerechent und mit angezeigt.
Das Problem ist, dass ich viele Subselects habe und bei der Umstellung auf Join scheitere.
Im Subselect bekomme ich richtigerweise keine Werte für einen Zähler, der in einer Woche keine Einträge hat.
Wenn ich das jetzt mit LEFT JOIN versuche, zeigt er nur die kleinste Menge an.
Ich dachte eigentlich, dass LEFT JOIN dann führend wäre und NULL bei Zählern ohne Wert setehen würde.
Liege ich hier komplett falsch oder funktioniert LEFT JOIN nicht auf der selben Tabelle?
Tabelle:
Abfrage Subselect, funktioniert wie gewollt:
Abfrage Join, schneided ab:
Werte:
Ich habe eine Tabelle mit Zählerständen, die ich 1x die Woche eingebe. Die Zähler haben eigene IDs und ich habe eine Abfrage die mir alle Zähler nebeneinander aus der selben Tabelle anzeigt (sortiert nach Woche).
Dabei wird auch gleich die Differenz zw. den Wochen ausgerechent und mit angezeigt.
Das Problem ist, dass ich viele Subselects habe und bei der Umstellung auf Join scheitere.
Im Subselect bekomme ich richtigerweise keine Werte für einen Zähler, der in einer Woche keine Einträge hat.
Wenn ich das jetzt mit LEFT JOIN versuche, zeigt er nur die kleinste Menge an.
Ich dachte eigentlich, dass LEFT JOIN dann führend wäre und NULL bei Zählern ohne Wert setehen würde.
Liege ich hier komplett falsch oder funktioniert LEFT JOIN nicht auf der selben Tabelle?
Tabelle:
Code:
CREATE TABLE IF NOT EXISTS `readings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`meter_id` int(11) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`value` float NOT NULL,
PRIMARY KEY (`id`)
)
Abfrage Subselect, funktioniert wie gewollt:
Code:
SELECT yearweek(r1.time) as week,date(r1.time) as date,
r1.value as gas,
round((r1.value - (select r.value from energy.readings r where r.meter_id = r1.meter_id and r.time < r1.time order by r.time desc limit 1)),3) as diff_gas,
(select r.value from readings r where r.time = r1.time and r.meter_id = (select meter_id from meter where active = 1 and name = 'Solarausbeute')) as solar,
((select r.value from readings r where r.time = r1.time and r.meter_id = (select meter_id from meter where active = 1 and name = 'Solarausbeute')) -
(select r2.value from readings r2 where r2.meter_id = (select meter_id from meter where active = 1 and name = 'Solarausbeute') and r2.time < r1.time order by r2.time desc limit 1)) as diff_solar,
r3.value as strom ,
round((r3.value - (select r.value from readings r where r.meter_id = r3.meter_id and r.time < r3.time order by r.time desc limit 1)),1) as diff_strom,
r4.value as wasser ,
round((r4.value - (select r.value from energy.readings r where r.meter_id = r4.meter_id and r.time < r4.time order by r.time desc limit 1)),3) as diff_wasser
FROM energy.readings r1
join energy.readings r3 on r3.time = r1.time
join energy.readings r4 on r4.time = r1.time
WHERE
r1.meter_id in (select meter_id from meter where name = 'Gas') and
r3.meter_id = (select meter_id from meter where active = 1 and name = 'Strom') and
r4.meter_id = (select meter_id from meter where active = 1 and name = 'Wasser')
order by r1.time desc
Abfrage Join, schneided ab:
Code:
SELECT yearweek(r1.time) as week,date(r1.time) as date,
r1.value as gas,
round((r1.value - (select r.value from energy.readings r where r.meter_id = r1.meter_id and r.time < r1.time order by r.time desc limit 1)),3) as diff_gas,
r2.value as solar,
round((r2.value - (select r.value from energy.readings r where r.meter_id = r2.meter_id and r.time < r2.time order by r.time desc limit 1)),3) as diff_solar,
r3.value as strom ,
round((r3.value - (select r.value from readings r where r.meter_id = r3.meter_id and r.time < r3.time order by r.time desc limit 1)),1) as diff_strom,
r4.value as wasser ,
round((r4.value - (select r.value from energy.readings r where r.meter_id = r4.meter_id and r.time < r4.time order by r.time desc limit 1)),3) as diff_wasser
FROM energy.readings r1
join energy.readings r2 on r2.time = r1.time
join energy.readings r3 on r3.time = r1.time
join energy.readings r4 on r4.time = r1.time
WHERE
r1.meter_id = 5 and
r2.meter_id = 6 and
r3.meter_id = 2 and
r4.meter_id = 3
order by r1.time desc
Werte:
Code:
INSERT INTO `readings` (`id`, `meter_id`, `time`, `value`) VALUES
(193, 5, '2013-05-05 20:00:00', 1719.85),
(194, 5, '2013-05-12 20:00:00', 1730.7),
(195, 5, '2013-05-19 20:00:00', 1740.2),
(196, 5, '2013-05-26 20:00:00', 1758.35),
(197, 5, '2013-06-02 20:00:00', 1779.15),
(198, 5, '2013-06-09 20:00:00', 1790.92),
(199, 5, '2013-06-16 20:00:00', 1796.52),
(200, 5, '2013-06-23 20:00:00', 1801.6),
(201, 5, '2013-06-30 20:00:00', 1811.04),
(202, 5, '2013-07-07 20:00:00', 1815.44),
(203, 5, '2013-07-14 20:00:00', 1819),
(204, 5, '2013-07-21 20:00:00', 1819.39),
(205, 5, '2013-07-28 20:00:00', 1823.1),
(206, 5, '2013-08-04 20:00:00', 1827.42),
(207, 5, '2013-08-11 20:00:00', 1829.11),
(208, 5, '2013-08-18 20:00:00', 1829.37),
(209, 5, '2013-08-25 20:00:00', 1831.39),
(210, 5, '2013-09-01 20:00:00', 1833.49),
(211, 5, '2013-09-08 20:00:00', 1836.18),
(212, 5, '2013-09-15 20:00:00', 1837.64),
(213, 5, '2013-09-22 20:00:00', 1856.26),
(214, 5, '2013-09-29 20:00:00', 1871.96),
(215, 5, '2013-10-06 20:00:00', 1886.24),
(216, 5, '2013-10-13 20:00:00', 1896.69),
(217, 5, '2013-10-20 20:00:00', 1915.52),
(218, 5, '2013-10-27 20:00:00', 1921.38),
(219, 5, '2013-11-03 20:00:00', 1937.89),
(411, 2, '2013-05-05 20:00:00', 1760.6),
(412, 2, '2013-05-12 20:00:00', 1809.6),
(413, 2, '2013-05-19 20:00:00', 1852.3),
(414, 2, '2013-05-26 20:00:00', 1898.7),
(415, 2, '2013-06-02 20:00:00', 1940.2),
(416, 2, '2013-06-09 20:00:00', 1978.8),
(417, 2, '2013-06-16 20:00:00', 2025.1),
(418, 2, '2013-06-23 20:00:00', 2064.1),
(419, 2, '2013-06-30 20:00:00', 2119.7),
(420, 2, '2013-07-07 20:00:00', 2171.8),
(421, 2, '2013-07-14 20:00:00', 2207.1),
(422, 2, '2013-07-21 20:00:00', 2234.4),
(423, 2, '2013-07-28 20:00:00', 2291),
(424, 2, '2013-08-04 20:00:00', 2331.8),
(425, 2, '2013-08-11 20:00:00', 2364.8),
(426, 2, '2013-08-18 20:00:00', 2397.5),
(427, 2, '2013-08-25 20:00:00', 2435.7),
(428, 2, '2013-09-01 20:00:00', 2470.1),
(429, 2, '2013-09-08 20:00:00', 2497.7),
(430, 2, '2013-09-15 20:00:00', 2528.5),
(431, 2, '2013-09-22 20:00:00', 2573.3),
(432, 2, '2013-09-29 20:00:00', 2617.9),
(433, 2, '2013-10-06 20:00:00', 2669.5),
(434, 2, '2013-10-13 20:00:00', 2715.1),
(435, 2, '2013-10-20 20:00:00', 2758.6),
(436, 2, '2013-10-27 20:00:00', 2807.5),
(437, 2, '2013-11-03 20:00:00', 2855.2),
(626, 3, '2013-05-05 20:00:00', 51.034),
(627, 3, '2013-05-12 20:00:00', 52.751),
(628, 3, '2013-05-19 20:00:00', 54.104),
(629, 3, '2013-05-26 20:00:00', 55.662),
(630, 3, '2013-06-02 20:00:00', 57.129),
(631, 3, '2013-06-09 20:00:00', 58.365),
(632, 3, '2013-06-16 20:00:00', 60.035),
(633, 3, '2013-06-23 20:00:00', 61.111),
(634, 3, '2013-06-30 20:00:00', 63.218),
(635, 3, '2013-07-07 20:00:00', 64.455),
(636, 3, '2013-07-14 20:00:00', 65.808),
(637, 3, '2013-07-21 20:00:00', 65.825),
(638, 3, '2013-07-28 20:00:00', 67.958),
(639, 3, '2013-08-04 20:00:00', 69.414),
(640, 3, '2013-08-11 20:00:00', 70.941),
(641, 3, '2013-08-18 20:00:00', 72.152),
(642, 3, '2013-08-25 20:00:00', 73.533),
(643, 3, '2013-09-01 20:00:00', 74.938),
(644, 3, '2013-09-08 20:00:00', 75.891),
(645, 3, '2013-09-15 20:00:00', 76.144),
(646, 3, '2013-09-22 20:00:00', 77.461),
(647, 3, '2013-09-29 20:00:00', 78.705),
(648, 3, '2013-10-06 20:00:00', 80.152),
(649, 3, '2013-10-13 20:00:00', 81.253),
(650, 3, '2013-10-20 20:00:00', 82.553),
(651, 3, '2013-10-27 20:00:00', 83.658),
(652, 3, '2013-11-03 20:00:00', 85.052),
(657, 5, '2013-11-10 20:00:00', 1966.54),
(658, 2, '2013-11-10 20:00:00', 2909.7),
(659, 3, '2013-11-10 20:00:00', 86.496),
(660, 6, '2013-08-11 20:00:00', 106),
(661, 6, '2013-08-18 20:00:00', 103),
(662, 6, '2013-08-25 20:00:00', 120),
(663, 6, '2013-09-01 20:00:00', 145),
(664, 6, '2013-09-08 20:00:00', 150),
(665, 6, '2013-09-15 20:00:00', 54),
(666, 6, '2013-09-22 20:00:00', 85),
(667, 6, '2013-09-29 20:00:00', 199),
(668, 6, '2013-10-06 20:00:00', 280),
(669, 6, '2013-10-13 20:00:00', 106),
(670, 6, '2013-10-20 20:00:00', 142),
(671, 6, '2013-10-27 20:00:00', 175),
(672, 6, '2013-11-03 20:00:00', 75),
(673, 6, '2013-11-10 20:00:00', 25),
(674, 5, '2013-11-17 20:00:00', 2004.05),
(675, 2, '2013-11-17 20:00:00', 2962.9),
(676, 3, '2013-11-17 20:00:00', 87.769),
(677, 6, '2013-11-17 20:00:00', 91);