Re: Counting days ...

From: Aarni Ruuhimäki <aarni(at)kymi(dot)com>
To: pgsql-sql(at)postgresql(dot)org
Cc: Frank Bax <fbax(at)sympatico(dot)ca>
Subject: Re: Counting days ...
Date: 2008-03-14 15:13:40
Message-ID: 200803141713.40589.aarni@kymi.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Thanks Frank,

Top and between posting ...

On Friday 14 March 2008 15:58, Frank Bax wrote:
> Frank Bax wrote:
> > Aarni Ruuhimäki wrote:
> >> Anyway, I have to rethink and elaborate the query. I know that it will
> >> usually be on a monthly or yearly basis, but a reservation can
> >> actually be any of the following in relation to the given (arbitrary)
> >> period:
> >>
> >> 1. start_day before period_start, end_day = period_start
> >> 2. start_day before period_start, end_day in period
> >> 3. start_day before period_start, end_day = period_end
> >> 4. start_day = period_start, end_day in period
> >> 5. start_day in period, end_day in period
> >> 6. start_day = period_start, end_day = period_end
> >> 7. start_day in period, end_day = period_end
> >> 8. start_day in period, end_day after period_end
> >> 9. start_day = period_start, end_day = period_end
> >> 10 start_day before period_start, end_day after period_end
> >
> > #6 and #9 are the same. You missed these:

Whoops, 9 should be c.

> >
> > a start_day before period_start, end_day before period_start

This I don't have to care about as it is not in the period we are looking at.

> > b start_day = period_start, end_day = period_start

Is zero days/nights, ignored. Not even possible to insert in the application.
end_day must be greater than start_day.

> > c start_day = period_start, end_day after period_end

Yes. Number 9 now.

> > d start_day = period_end, end_day = period_end

Is zero days, ignored. like b.

> > e start_day = period_end, end_day after period_end

Is outside the period. Day changes / the night starts at midnight, so this
would go in the 'next' period. Like number 1 comes in this period as one day.

> > f start_day after period_end, end_day after period_end

This is also outside the period we are looking at.

> >
> > Granted, a & f should not match where clause; but then groups 10,c,e
> > don't meet your where clause either. Your where clause should probably
> > be:
> >
> > WHERE group_id = 1 AND (res_start_day >= '2007-01-01' AND res_end_day <=
> > '2008-12-31')
> >
> > Are you sure that your database does not have any rows where start_day
> > is after end_day? These rows could certainly skew results.

Yes, the application does not allow this.
SELECT res_id FROM product_res WHERE res_start_day > res_end_day;
res_id
--------
(0 rows)

> >
> > I would suggest that you identify a few rows that meet each of these
> > conditions. Change the where clause to select rows in one group at a
> > time. You might consider using a unique row identifier in where clause
> > during these tests to make sure you are processing the rows you think
> > you are. When all test cases work properly; then run your generalized
> > query again.
>
> Change 10,c,e to 8,10,c,e - Group 8 also does not meet your initial
> WHERE clause. My suggestion for WHERE clause also does not work. This
> might work better (although it still could be wrong):
>
> WHERE group_id = 1 AND (res_start_day BETWEEN '2007-01-01' AND
> '2008-12-31' OR res_end_day BETWEEN '2007-01-01' AND '2008-12-31')
>
> In case I still have it wrong, try each test group separately and you'll
> soon find out if the WHERE clause is correct or not.

I think I need more ORs in the WHERE clause to find all res_ids I want to
count according to the 10 rules. Ie. if one or more days of a reservation is
'inside' the given period.

Testing ...

Best regards,

--
Aarni Ruuhimäki
---
Burglars usually come in through your windows.
---

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Steve Crawford 2008-03-14 15:59:49 Re: Counting days ...
Previous Message Frank Bax 2008-03-14 13:58:34 Re: Counting days ...