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

select min date in sp (dts) does not get the right date

SET              NOCOUNT ON
                      DECLARE @Peildatum datetime DECLARE @Test datetime DECLARE @Beginvoorraad int DECLARE @Eindvoorraad int DECLARE @Inslag int DECLARE
                       @SQL nvarchar(600) DECLARE @begindatum datetime DECLARE @einddatum datetime DECLARE @date datetime, @first datetime,
                      @last datetime
SET              @date = getdate()
SET              @begindatum = cast(month(@date) AS varchar(2)) + '/1/' + cast(year(@date) AS varchar(4))
                          DELETE FROM Voorraadstaatmaand
SET              @Test =
                          (SELECT     MIN(Datum)
                            FROM          DW_Voorraadstanden
                            WHERE      DateName(mm, Datum) + '-' + DateName(yyyy, Datum) = DateName(mm, @Begindatum) + '-' + DateName(yyyy, @Begindatum))
SET              @Einddatum =
                          (SELECT     MAX(Faktuur_dat)
                            FROM          DW_Uitgevoerde_opdrachten
                            WHERE      Faktuur_dat <= @Einddatum)
SET              @Peildatum = getdate()
                          INSERT      
                           INTO            dbo.Voorraadstaatmaand(ISBN, Auteur, Titel, Fonds, Stadium_levenscyclus, Stadium_dienstverlening, Versch_dat_eerste_druk, Prijs,
                                                  Vervangen_door, Versch_dat_laatste_druk, kostprijs)
                                                      SELECT     ISBN, Auteur, Titel, Fonds, Stadium_levenscyclus, Stadium_dienstverlening, Versch_dat_eerste_druk, Prijs, Vervangen_door,
                                                                              versch_dat_laatste_druk, kostprijs
                                                       FROM         dbo.W_DW_artikel_informatie
                                                       ORDER BY ISBN EXEC sp_executesql @SQL EXEC sp_executesql @SQL
                                                                                  UPDATE    Voorraadstaatmaand
0
timohorn
Asked:
timohorn
3 Solutions
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
date and time handling is easy... if you know how to approach it exactly:
http://www.experts-exchange.com/A_1499.html
0
 
gsiricCommented:
If I understand you are trying to get min date in the current month, couse you are setting @Begindatum variable as the first day of the month ?

What if you dont have dates in the current month ? You will get NULL.  Can you have dates in future, so min(date) can be  greater then current date ?

Following formula can be used to extract year and month from date:

DATEPART(year,Datum)*100 +DATEPART(month,Datum)  


I will use following statement for determining min date:
(You can replace >= for = if you want only dates from curent month not in the future)







SELECT  MIN(Datum) FROM DW_Voorraadstanden
WHERE
 DATEPART(year,Datum)*100 +DATEPART(month,Datum) 
  >=
 DATEPART(year,GETDATE())*100 + DATEPART(month,GETDATE());

Open in new window

0
 
timohornAuthor Commented:
the begin date is always the first of the month 1 ja, 1 feb etc etc
i can fill the table with the data,  the problem start when i want to update the table.
i think that the part

   SET              @Einddatum =
                          (SELECT     MAX(Faktuur_dat)
                            FROM          DW_Uitgevoerde_opdrachten
                            WHERE      Faktuur_dat <= @Einddatum)        

does n't get any date,if i run it as stored procedure from msacces it works (little adjustment)

SET              NOCOUNT ON 
                      DECLARE @Peildatum datetime DECLARE @Test datetime DECLARE @Beginvoorraad int DECLARE @Eindvoorraad int DECLARE @Inslag int DECLARE
                       @SQL nvarchar(600) DECLARE @begindatum datetime DECLARE @einddatum datetime DECLARE @date datetime, @first datetime, 
                      @last datetime
SET              @date = getdate()
SET              @begindatum = cast(month(@date) AS varchar(2)) + '/1/' + cast(year(@date) AS varchar(4))
                          DELETE FROM Voorraadstaatmaand
SET              @Test =
                          (SELECT     MIN(Datum)
                            FROM          DW_Voorraadstanden
                            WHERE      DateName(mm, Datum) + '-' + DateName(yyyy, Datum) = DateName(mm, @Begindatum) + '-' + DateName(yyyy, @Begindatum))
SET              @Einddatum =
                          (SELECT     MAX(Faktuur_dat)
                            FROM          DW_Uitgevoerde_opdrachten
                            WHERE      Faktuur_dat <= @Einddatum)
SET              @Peildatum = getdate()
                          INSERT      
                           INTO            dbo.Voorraadstaatmaand(ISBN, Auteur, Titel, Fonds, Stadium_levenscyclus, Stadium_dienstverlening, Versch_dat_eerste_druk, Prijs, 
                                                  Vervangen_door, Versch_dat_laatste_druk, kostprijs)
                                                      SELECT     ISBN, Auteur, Titel, Fonds, Stadium_levenscyclus, Stadium_dienstverlening, Versch_dat_eerste_druk, Prijs, Vervangen_door, 
                                                                              versch_dat_laatste_druk, kostprijs
                                                       FROM         dbo.W_DW_artikel_informatie
                                                       ORDER BY ISBN EXEC sp_executesql @SQL EXEC sp_executesql @SQL
                                                                                  UPDATE    Voorraadstaatmaand
                                                                                   SET              @Eindvoorraad =
                                                                                                              (SELECT     Aantal
                                                                                                                FROM          DW_Voorraadstanden
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Datum = @Peildatum), 
                                                                                                          Eindvoorraad = (CASE WHEN @Eindvoorraad IS NULL THEN 0 ELSE @Eindvoorraad END), 
                                                                                                          @Beginvoorraad =
                                                                                                              (SELECT     Aantal
                                                                                                                FROM          DW_Voorraadstanden
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Datum = @Test), @Inslag =
                                                                                                              (SELECT     aantal
                                                                                                                FROM          DW_Goederenbeweging_CB_som
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND (Mutatie_kd = 'GONCO' OR
                                                                                                                                       Mutatie_kd = 'DISASSI') AND Datum = @Test), 
                                                                                                          Beginvoorraad = (CASE WHEN @Beginvoorraad IS NULL THEN 0 ELSE @Beginvoorraad END) 
                                                                                                          - (CASE WHEN @Inslag IS NULL THEN 0 ELSE @Inslag END), Inslag =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal) IS NULL THEN 0 ELSE SUM(Aantal) END
                                                                                                                FROM          DW_Goederenbeweging_CB
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND (Mutatie_kd = 'GONCO' OR
                                                                                                                                       Mutatie_kd = 'DISASSI') AND Datum >= @Test AND Datum <= @Einddatum), 
                                                                                                          Aantal_aanbieding =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_verkopen) IS NULL THEN 0 ELSE SUM(Aantal_verkopen) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Transactie_vwc <> 'DUD' AND Verkoopsoort = 'AANB' AND 
                                                                                                                                       Distributeur = 'C' AND Faktuur_dat >= @Begindatum AND Faktuur_dat <= @Einddatum), 
                                                                                                          Aantal_herbevoorrading =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_verkopen) IS NULL THEN 0 ELSE SUM(Aantal_verkopen) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Transactie_vwc <> 'DUD' AND Verkoopsoort = 'NORM' AND 
                                                                                                                                       Opdracht_type <> 'LPROM' AND Distributeur = 'C' AND Faktuur_dat >= @Begindatum AND 
                                                                                                                                       Faktuur_dat <= @Einddatum), Aantal_depot =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_verkopen) IS NULL THEN 0 ELSE SUM(Aantal_verkopen) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Transactie_vwc = 'DUD' AND Distributeur = 'C' AND 
                                                                                                                                       Faktuur_dat >= @Begindatum AND Faktuur_dat <= @Einddatum), Aantal_overig =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_verkopen) IS NULL THEN 0 ELSE SUM(Aantal_verkopen) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Transactie_vwc <> 'DUD' AND Verkoopsoort <> 'AANB' AND 
                                                                                                                                       Verkoopsoort <> 'NORM' AND Distributeur = 'C' AND Faktuur_dat >= @Begindatum AND 
                                                                                                                                       Faktuur_dat <= @Einddatum), Aantal_retouren =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_retouren) IS NULL THEN 0 ELSE SUM(Aantal_retouren) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Distributeur = 'C' AND Faktuur_dat >= @Begindatum AND 
                                                                                                                                       Faktuur_dat <= @Einddatum), Aantal =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal) IS NULL THEN 0 ELSE SUM(Aantal) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Opdracht_type <> 'LPROM' AND Distributeur = 'C' AND 
                                                                                                                                       Faktuur_dat >= @Begindatum AND Faktuur_dat <= @Einddatum), 
                                                                                                          Aantal_present_exemplaren =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal) IS NULL THEN 0 ELSE SUM(Aantal) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Opdracht_type = 'LPROM' AND Distributeur = 'C' AND 
                                                                                                                                       Faktuur_dat >= @Begindatum AND Faktuur_dat <= @Einddatum), Aantal_vernietigd =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal) IS NULL THEN 0 ELSE - SUM(Aantal) END
                                                                                                                FROM          DW_Uitgevoerde_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND (Opdracht_type = 'FRR' OR
                                                                                                                                       Opdracht_type = 'VERNIE') AND Distributeur = 'C' AND Faktuur_dat >= @Begindatum AND 
                                                                                                                                       Faktuur_dat <= @Einddatum), Aantal_in_nota =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal) IS NULL THEN 0 ELSE SUM(Aantal) END
                                                                                                                FROM          DW_Openstaande_opdrachten
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN), Aantal_geblokkeerd_CB =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_geblokkeerd_CB) IS NULL THEN 0 ELSE SUM(Aantal_geblokkeerd_CB) 
                                                                                                                                       END
                                                                                                                FROM          DW_Voorraadstanden
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Datum = @Einddatum), Aantal_geblokkeerd_eig =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_geblokkeerd_eig) IS NULL THEN 0 ELSE SUM(Aantal_geblokkeerd_eig) 
                                                                                                                                       END
                                                                                                                FROM          DW_Voorraadstanden
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Datum = @Einddatum), 
                                                                                                          Aantal_gereserveerd_levering =
                                                                                                              (SELECT     CASE WHEN SUM(Aantal_gereserveerd_levering) IS NULL 
                                                                                                                                       THEN 0 ELSE SUM(Aantal_gereserveerd_levering) END
                                                                                                                FROM          DW_Voorraadstanden
                                                                                                                WHERE      ISBN = Voorraadstaatmaand.ISBN AND Datum = @Einddatum)
                                                                                   FROM         Voorraadstaatmaand
                                                                                                              UPDATE    Voorraadstaatmaand
                                                                                                               SET              Voorraad_verschil = Eindvoorraad - Beginvoorraad - Inslag + Aantal + Aantal_present_exemplaren +
                                                                                                                                       Aantal_vernietigd, Geblokkeerd = (CASE WHEN Aantal_geblokkeerd_CB > 0 OR
                                                                                                                                      Aantal_geblokkeerd_eig > 0 THEN 'Geblokkeerd' END)
                                                                                                               FROM         Voorraadstaatmaand
                                                                                                                                          DELETE FROM Voorraadstaatmaand
                                                                                                                                           WHERE     Beginvoorraad = 0 AND Eindvoorraad = 0 AND Inslag = 0 AND Aantal = 0 AND 
                                                                                                                                                                  Aantal_present_exemplaren = 0 AND Aantal_vernietigd = 0 AND Aantal_in_nota = 0 AND
                                                                                                                                                                   Fonds IN
                                                                                                                                                                      (SELECT     Fonds
                                                                                                                                                                        FROM          PI_Fonds
                                                                                                                                                                        WHERE      Actief = 0)

Open in new window

0
Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

 
gsiricCommented:
Yep couse you didnt set @einddatum variable so your sql is like:

  SET              @Einddatum =
                          (SELECT     MAX(Faktuur_dat)
                            FROM          DW_Uitgevoerde_opdrachten
                            WHERE      Faktuur_dat <= NULL)  

iif you are looking just for max date remove where clausule:
SET              @Einddatum =
                          (SELECT     MAX(Faktuur_dat)
                            FROM          DW_Uitgevoerde_opdrachten )  
0
 
CboudrozCommented:
You can not do this in SQL server:
where Faktuur_dat <= NULL

NULL is not greater and not smaller than anything, you can not compare NULL value, you can only check if it's null or not NULL like this

WHERE Faktuur_dat is not null
or
WHERE Faktuur_dat is null


 
if NULL > 1
begin 
	select 'NULL greater dans 1'
end
else if NULL < 1
begin 
	select 'NULL smaller dans 1'
end
else 
begin 
	select 'NULL not greater not smaller'
end

Open in new window



and also in the MAX(Faktuur_dat) the value NULL will be ignore, so no need to put the clause:

WHERE Faktuur_dat is not null



 

 
0
 
timohornAuthor Commented:
Had to assign some parameters again, but the help showed me the right direction
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

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