Populating missing dates in postgresql data - Mailing list pgsql-general

From Lavrenz, Steven M
Subject Populating missing dates in postgresql data
Date
Msg-id A6E66984D41D2643B95A86C24AB9BBF344B2F9DC@wpvexcmbx02.purdue.lcl
Whole thread Raw
Responses Re: Populating missing dates in postgresql data  (Adrian Klaver <adrian.klaver@aklaver.com>)
Re: Populating missing dates in postgresql data  ("David G. Johnston" <david.g.johnston@gmail.com>)
Re: Populating missing dates in postgresql data  (Alban Hertroys <haramrae@gmail.com>)
Re: Populating missing dates in postgresql data  (Vincent Veyron <vv.lists@wanadoo.fr>)
List pgsql-general

Alright everyone, this is a doozy of a problem. I am new to Postgres so I appreciate patience/understanding. I have a database of hardware objects, each of which has several different “channels”. Once per day, these channels are supposed to check in with a central server, generating an event log table (TABLE A) like the following:

 

object_id             channel                check-in date

****************************************

990                         1                              2014-12-01

990                         1                              2014-12-02

990                         2                              2014-12-01

990                         2                              2014-12-02

286                         2                              2014-12-01

286                         2                              2014-12-02

286                         5                              2014-12-01

286                         5                              2014-12-02

4507                       1                              2014-12-01

4507                       1                              2014-12-02

4507                       2                              2014-12-01

4507                       2                              2014-12-02

 

And so on. Occasionally, communications will break down to the hardware, such that no reporting occurs. For example, let’s say that object 286 loses communications on 12/1/2014. Then the table might look like:   

 

object_id             channel                check-in date

****************************************

990                         1                              2014-12-01

990                         1                              2014-12-02

990                         2                              2014-12-01

990                         2                              2014-12-02

 

286                         2                              2014-12-02

 

286                         5                              2014-12-02

4507                       1                              2014-12-01

4507                       1                              2014-12-02

4507                       2                              2014-12-01

4507                       2                              2014-12-02

 

Or let’s say that for some reason, just channel 2 loses reporting for a day. Then we would have:

 

object_id             channel                check-in date

****************************************

990                         1                              2014-12-01

990                         1                              2014-12-02

990                         2                              2014-12-01

990                         2                              2014-12-02

 

286                         2                              2014-12-02

286                         5                              2014-12-01

286                         5                              2014-12-02

4507                       1                              2014-12-01

4507                       1                              2014-12-02

4507                       2                              2014-12-01

4507                       2                              2014-12-02

 

I have a second table (TABLE B) with all of the object_ids and channels that are supposed to be reporting in each day. For cases where a certain channel does not check in, I want to add a column that indicates the comm failure. So, for the example where all channels on object 286 do not check in, I would like to get is something like this:

 

object_id             channel                check-in date                     comm failure

**********************************************************

990                         1                              2014-12-01                          No

990                         1                              2014-12-02                          No

990                         2                              2014-12-01                          No

990                         2                              2014-12-02                          No

286                         2                              2014-12-01                          Yes

286                         2                              2014-12-02                          No

286                         5                              2014-12-01                          Yes

286                         5                              2014-12-02                          No

4507                       1                              2014-12-01                          No

4507                       1                              2014-12-02                          No

4507                       2                              2014-12-01                          No

4507                       2                              2014-12-02                          No

 

 

I have been racking my mind for the better part of a day on how to do this. The thing is that I can do a right join of TABLE B on TABLE A, and this will populate the missing object ids and channels. However, this only works for a single day, and it gives me something like:

 

object_id             channel                check-in date                     comm failure

**********************************************************

990                         1                              2014-12-01                          No

990                         1                              2014-12-02                          No

990                         2                              2014-12-01                          No

990                         2                              2014-12-02                          No

286                         2                                                                              Yes

286                         2                              2014-12-02                          No

286                         5                                                                              Yes

286                         5                              2014-12-02                          No

4507                       1                              2014-12-01                          No

4507                       1                              2014-12-02                          No

4507                       2                              2014-12-01                          No

4507                       2                              2014-12-02                          No

 

I need to do a count of comm failures by day, so I need to populate the check-in date field. Please help!

               

 

Best Regards,

Steve

 

*************************************************

Steven Lavrenz, MS, EIT

Doctoral Research Fellow, Ph.D. Candidate

Purdue University | Transportation Engineering

Hampton Hall of Civil Engineering, Room 1122

550 Stadium Mall Drive
West Lafayette, IN 47907

765-775-6423

slavrenz@purdue.edu

 

pgsql-general by date:

Previous
From: Craig Ringer
Date:
Subject: Re: BDR - triggers on receiving node?
Next
From: Adrian Klaver
Date:
Subject: Re: Populating missing dates in postgresql data