• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 99
  • Last Modified:

sql calculate reminders

I need to create a query about car service reminders. The car can have 3 type of reminders: 2- Registration, 3 - Emission Test, 4 - State Inspection

The car table has the last date the task was performed.
CarActivitiees table has all prams repeat very 2 years , remind 10 days before it is due and so on

carActivities dataStructure
id      int       primary key
activityID      int        0 - oil change, 1-oil Change; 2 - Registration; 3-Emission;4-State Inspection
repeatNumber      int       (every 2 days, or every 2 years )
repeatCycle      int       (every 2 days, or every 2 years )
remindNumber      int       (every 2 days, or every 2 years )
remindCycle      int       (every 2 days, or every 2 years )
carKey      int      the car we are dealing with
0
erikTsomik
Asked:
erikTsomik
  • 7
  • 3
1 Solution
 
erikTsomikSystem Architect, CF programmer Author Commented:
Any suggestions?
0
 
Scott PletcherSenior DBACommented:
That would be vastly easier to do if you provided an actual table definition (CREATE TABLE ...) for carActivities and car.  Can't even tell the date column(s) to use from what you posted.
0
 
erikTsomikSystem Architect, CF programmer Author Commented:
CREATE TABLE [dbo].[carActivities](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[activityID] [int] NOT NULL,
	[repeatNumber] [int] NOT NULL,
	[repeatCycle] [int] NOT NULL,
	[remindNumber] [int] NOT NULL,
	[remindCycle] [int] NOT NULL,
	[carKey] [int] NOT NULL,
 CONSTRAINT [PK_car_activities] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1-oil Change; 2 - Registration; 3-Emission;4-State Inspection' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'carActivities', @level2type=N'COLUMN',@level2name=N'activityID'
GO

Open in new window

0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
Scott PletcherSenior DBACommented:
The car table has the last date the task was performed.

What is that table's structure?  Is there an activity id on it as well?  Or are all the dates de-normalized into one row?
0
 
erikTsomikSystem Architect, CF programmer Author Commented:
here is table car Structure . The fields that I am interesting in are [regdate] ,[emissiondate],      [inspectiondate], and oilChangeMilage which is the last milage when the oil chnage was done. The dates are denormalize into 1 row
CREATE TABLE [dbo].[car](
	[carkey] [int] IDENTITY(1,1) NOT NULL,
	[carnumber] [char](10) NOT NULL,
	[locationkey] [int] NULL,
	[description] [varchar](50) NULL,
	[tagnumber] [varchar](10) NULL,
	[note] [varchar](255) NULL,
	[carType] [varchar](10) NULL,
	[carActiveIn] [bit] NULL,
	[carServiceIn] [bit] NULL,
	[originstate] [varchar](2) NULL,
	[sessiontype] [varchar](10) NULL,
	[modelyear] [int] NULL,
	[make] [varchar](20) NULL,
	[model] [varchar](20) NULL,
	[vin] [varchar](50) NULL,
	[regdate] [datetime] NULL,
	
	[emissiondate] [datetime] NULL,
	
	[inspectiondate] [datetime] NULL,
	
	[carstatus] [varchar](10) NULL,
	[instructorkey] [int] NULL,
	[retired] [char](1) NULL,
	[isstatic] [char](1) NULL,
	[oilChangeMilage] [int] NULL,
 CONSTRAINT [PK_car] PRIMARY KEY NONCLUSTERED 
(
	[carkey] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

Open in new window

0
 
erikTsomikSystem Architect, CF programmer Author Commented:
Any suggestions
0
 
Duy PhamFreelance IT ConsultantCommented:
repeatNumber      int       (every 2 days, or every 2 years )
repeatCycle      int       (every 2 days, or every 2 years )
remindNumber      int       (every 2 days, or every 2 years )
remindCycle      int       (every 2 days, or every 2 years )

Please be more specific about these fields. What do they mean? Types of Units (minutes/hours/days/etc.)?
0
 
erikTsomikSystem Architect, CF programmer Author Commented:
repeatnumber (1,2,3,4 and so on )is just a number  repeatCycle is a unit it is measure on  (days,month,weeks,years )
0
 
erikTsomikSystem Architect, CF programmer Author Commented:
Are there any suggestions?
0
 
Scott PletcherSenior DBACommented:
Still not enough details for a full answer:

repeatCycle is a unit it is measure on  (days,month,weeks,years )

But cycle is an int -- does 1 stand for day, or 100 or whatever?  No way for us to know what cycle code you assigned for what time period.

But something like below should be close and give you an idea on how to join:

SELECT c.*, ca.*
FROM dbo.car c
CROSS JOIN (
    SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) AS todays_date
) AS assign_alias_names
INNER JOIN dbo.carActivities ca ON
    ((ca.activityID = 2 AND todays_date = DATEADD(DAY, ca.remindNumber, DATEADD(YEAR, +2, c.regdate))) OR
     (ca.activityID = 3 AND todays_date = DATEADD(DAY, ca.remindNumber, DATEADD(YEAR, +2, c.emissiondate))) OR
     (ca.activityID = 4 AND todays_date = DATEADD(DAY, ca.remindNumber, DATEADD(YEAR, +2, c.inspectiondate))))
0
 
erikTsomikSystem Architect, CF programmer Author Commented:
repeat Cycle is 0- miles, 1 - day,2,weeks,3 - month,4 -- Year
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 7
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now