August 30, 2020 at 7:06 pm
I have a table A with InDate, OuTDate and weight column. I have another table B column which has CheckDate in it. Basically, table B has calendar dates in it.
Need to three things.
In all, i just need to return one row for the given set.
CREATE TABLE [dbo].[test2]
(
[InDate] [datetime2](7) NULL,
[OutDate] [datetime2](7) NULL,
[weight] [float] NULL
)
insert into test2(InDate, OutDate, weight)
values('2018-09-21 00:00:00.0000000', '2019-01-07 00:00:00.0000000', 1207.362172)
insert into test2(InDate, OutDate, weight)
values('2017-11-10 00:00:00.0000000', '2018-04-30 00:00:00.0000000', 1194.8)
insert into test2(InDate, OutDate, weight)
values('2017-04-17 00:00:00.0000000', '2017-08-14 00:00:00.0000000', 1003.2)
insert into test2(InDate, OutDate, weight)
values('2017-07-15 00:00:00.0000000', '2017-11-20 00:00:00.0000000', 1199.2)
insert into test2(InDate, OutDate, weight)
values('2017-10-20 00:00:00.0000000', '2018-04-22 00:00:00.0000000' 675)
insert into test2(InDate, OutDate, weight)
values('2017-01-01 00:00:00.0000000', '2017-04-22 00:00:00.0000000' 675)
Create tableB (checkdate [OutDate] [datetime2](7) NULL)
Insert table B values ('2020-01-02')
Insert table B values ('2020-01-03')
Insert table B values ('2017-01-01')
Insert table B values ('2017-01-03')
Insert table B values ('2018-01-03')
Any help would be appreciated
August 30, 2020 at 7:56 pm
I rewrote your create table and inserts, because they didn't run. You don't need DateTime2 if you're not using time.
CREATE TABLE [test2]
(
[InDate] [date] NULL,
[OutDate] [date] NULL,
[weight] [float] NULL
);
Create TABLE tableB ([OutDate] date);
go
insert into test2(InDate, OutDate, weight)
values('2018-09-21 00:00:00.0000000', '2019-01-07 00:00:00.0000000', 1207.362172)
insert into test2(InDate, OutDate, weight)
values('2017-11-10 00:00:00.0000000', '2018-04-30 00:00:00.0000000', 1194.8)
insert into test2(InDate, OutDate, weight)
values('2017-04-17 00:00:00.0000000', '2017-08-14 00:00:00.0000000', 1003.2)
insert into test2(InDate, OutDate, weight)
values('2017-07-15 00:00:00.0000000', '2017-11-20 00:00:00.0000000', 1199.2)
insert into test2(InDate, OutDate, weight)
values('2017-10-20 00:00:00.0000000', '2018-04-22 00:00:00.0000000', 675)
insert into test2(InDate, OutDate, weight)
values('2017-01-01 00:00:00.0000000', '2017-04-22 00:00:00.0000000', 675)
Insert into tableB values ('2020-01-02');
Insert into tableB values ('2020-01-03');
Insert tableB values ('2017-01-01');
Insert tableB values ('2017-01-03');
Insert tableB values ('2018-01-03');
What do these two tables refer to in the real world? it sounds like you're trying to get total weight on each date given visits that span a range of dates. But who knows? Would help a LOT if you chose descriptive names for your tables. If you want that, it's something like this:
CREATE TABLE [Visit]
(
[InDate] [date] NULL,
[OutDate] [date] NULL,
[weight] [float] NULL
);
Create TABLE Calendar ([TheDate] date);
go
TRUNCATE TABLE Visit;
insert into Visit(InDate, OutDate, weight)
values('2018-01-01', '2018-01-07', 1207.362172)
,('2018-01-10', '2018-01-30', 1194.8)
,('2018-01-14', '2018-01-17', 1003.2)
,('2018-01-15', '2018-01-20', 1199.2)
,('2018-01-20', '2018-01-22', 675)
,('2018-01-01', '2018-01-22', 675);
CREATE TABLE Calendar(TheDate DATE PRIMARY KEY);
GO
INSERT INTO Calendar(TheDate)
SELECT DATEADD(day,n-1,'2018-01-01')
FROM Testdb.dbo.Tally t
WHERE n <= (SELECT DATEDIFF(day,MIN(InDate),MAX(OutDate)) FROM Visit);
SELECT c.TheDate, SUM([weight]) AS DailyWeight
FROM Calendar c
LEFT JOIN Visit v
ON c.TheDate >= v.InDate AND c.TheDate <= v.OutDate
GROUP BY c.TheDate;
Viewing 2 posts - 1 through 1 (of 1 total)
You must be logged in to reply to this topic. Login to reply