Reputation: 721
first table meter_values
|id | somedata | date(YY-MM-DD)| status |
|-----+-----------+---------------+--------|
|1 | tets | 20180628 | 6 |
|2 | setd | 20180627 | 6 |
|3 | ewrw5 | 20180701 | 6 |
|4 | 6werww | 20180730 | 6 |
|5 | werqwe | 20180803 | 6 |
|6 | wrwerw | 20171130 | 6 |
second table period
| year | begin | end |
|--------+----------+----------|
| 201807 | 20180626 | 20180704 |
| 201808 | 20180730 | 20180803 |
| 201801 | 20171228 | 20180104 |
| 201712 | 20171129 | 20171205 |
i need get count(meter_values) where meter_values.status=6 and group by year and date from table period.begin and period.end
example:
| year | begin | end | count(meter_values) |
|--------+----------+----------+---------------------|
| 201807 | 20180626 | 20180704 | 3 |
| 201808 | 20180730 | 20180803 | 2 |
| 201801 | 20171228 | 20180104 | 0 |
| 201712 | 20171129 | 20171205 | 1 |
i try this query
select *
from period,
(select count(meter_values.id)
from meter_values, period
where meter_values.date>=period.begin
and meter_values.date<=period.end
and meter_values.status=6
and period.begin is not null
and period.end is not null)
as mv
where period.begin is not null and period.end is not null;
but i get count of all records
| year | begin | end | count(meter_values) |
|--------+----------+----------+---------------------|
| 201807 | 20180626 | 20180704 | 6 |
| 201808 | 20180730 | 20180803 | 6 |
| 201801 | 20171228 | 20180104 | 6 |
| 201712 | 20171129 | 20171205 | 6 |
Upvotes: 1
Views: 766
Reputation: 133360
you could use a inner join and a count
select a.year, a.begin, a.end, count(*)
from meter_values b
inner join period a on b.date between a.begin and a.end and b.status = 6
group by a.year, a.begin, a.end
Upvotes: 3