Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. Sql Query

Sql Query

Scheduled Pinned Locked Moved Database
database
13 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Simon_Whale

    what database are you using? SQL Server, Oracle, MySQL or Access. Also edit your question and expand on what you are after also include sample table stucture and/or even sample date so that people can give you a full answer.

    Every day, thousands of innocent plants are killed by vegetarians. Help end the violence EAT BACON

    S Offline
    S Offline
    Srinivas Uttareshwar
    wrote on last edited by
    #3

    i'm using sql server 2008 i'm having table where timesheet is filled weekely i'e from monday to sunday and i'm saving start and end date of the week but when retrieving the data dates selected may be any day of the week. example if selected date is 15/8/2013 and 30/8/2013 and dates saved in table is from 2013-08-12(mon) 2013-08-18(sun) 2013-08-19 2013-08-25 2013-08-26 2013-09-01 2013-09-02 2013-09-08 2013-07-08 2013-07-14 2013-06-03 2013-06-09 2013-07-22 2013-07-28 MON TUE WED THUR FRI SAT SUN 8 8 7 7 7 7 7 8 8 8 8 8 8 8 0 8 8 8 8 8 8 0 8 8 8 8 8 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 i need data between 15/8/2013 to 30/8/2013

    Richard DeemingR 1 Reply Last reply
    0
    • S Srinivas Uttareshwar

      i'm using sql server 2008 i'm having table where timesheet is filled weekely i'e from monday to sunday and i'm saving start and end date of the week but when retrieving the data dates selected may be any day of the week. example if selected date is 15/8/2013 and 30/8/2013 and dates saved in table is from 2013-08-12(mon) 2013-08-18(sun) 2013-08-19 2013-08-25 2013-08-26 2013-09-01 2013-09-02 2013-09-08 2013-07-08 2013-07-14 2013-06-03 2013-06-09 2013-07-22 2013-07-28 MON TUE WED THUR FRI SAT SUN 8 8 7 7 7 7 7 8 8 8 8 8 8 8 0 8 8 8 8 8 8 0 8 8 8 8 8 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 i need data between 15/8/2013 to 30/8/2013

      Richard DeemingR Offline
      Richard DeemingR Offline
      Richard Deeming
      wrote on last edited by
      #4

      You can get the data for any weeks which overlap the selected date range with:

      WHERE
      WeekStartDate <= @SelectedEndDate
      And
      WeekEndDate >= @SelectedStartDate

      For your example, that would give you the data between 2013-08-12 and 2013-09-01. Since the data for a week appears to be on a single row, it's not obvious how you intend to return only part of a week.


      "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

      "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

      S 1 Reply Last reply
      0
      • Richard DeemingR Richard Deeming

        You can get the data for any weeks which overlap the selected date range with:

        WHERE
        WeekStartDate <= @SelectedEndDate
        And
        WeekEndDate >= @SelectedStartDate

        For your example, that would give you the data between 2013-08-12 and 2013-09-01. Since the data for a week appears to be on a single row, it's not obvious how you intend to return only part of a week.


        "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

        S Offline
        S Offline
        Srinivas Uttareshwar
        wrote on last edited by
        #5

        from this query we are getting data for whole week but selected startdate may be thur or any day i need data from that particular day to the particular enddate selected

        Richard DeemingR 1 Reply Last reply
        0
        • S Srinivas Uttareshwar

          from this query we are getting data for whole week but selected startdate may be thur or any day i need data from that particular day to the particular enddate selected

          Richard DeemingR Offline
          Richard DeemingR Offline
          Richard Deeming
          wrote on last edited by
          #6

          As I said, since the data for the entire week appears to be on a single row, it's not obvious how you intend to return only part of a week. Once you explain that, then we might be able to help you. :)


          "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

          "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

          S 1 Reply Last reply
          0
          • Richard DeemingR Richard Deeming

            As I said, since the data for the entire week appears to be on a single row, it's not obvious how you intend to return only part of a week. Once you explain that, then we might be able to help you. :)


            "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

            S Offline
            S Offline
            Srinivas Uttareshwar
            wrote on last edited by
            #7

            any alternate solution to go with suggest please.

            Richard DeemingR 1 Reply Last reply
            0
            • S Srinivas Uttareshwar

              any alternate solution to go with suggest please.

              Richard DeemingR Offline
              Richard DeemingR Offline
              Richard Deeming
              wrote on last edited by
              #8

              Since you haven't explained how you want the data to be returned, how is anyone supposed to suggest a solution?!


              "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

              "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

              S 1 Reply Last reply
              0
              • Richard DeemingR Richard Deeming

                Since you haven't explained how you want the data to be returned, how is anyone supposed to suggest a solution?!


                "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                S Offline
                S Offline
                Srinivas Uttareshwar
                wrote on last edited by
                #9

                from selected date i need date,day of the week and no of hrs he worked on that day and same till the end date selected

                Richard DeemingR 1 Reply Last reply
                0
                • S Srinivas Uttareshwar

                  from selected date i need date,day of the week and no of hrs he worked on that day and same till the end date selected

                  Richard DeemingR Offline
                  Richard DeemingR Offline
                  Richard Deeming
                  wrote on last edited by
                  #10

                  So you essentially want one row per day?

                  DECLARE @SelectedStartDate date = '20130815';
                  DECLARE @SelectedEndDate date = '20130830';

                  WITH cteOverlappingWeeks As
                  (
                  SELECT
                  StartDate,
                  MON,
                  TUE,
                  WED,
                  THUR,
                  FRI,
                  SAT,
                  SUN
                  FROM
                  dbo.Timesheet
                  WHERE
                  StartDate <= @SelectedEndDate
                  And
                  EndDate >= @SelectedStartDate
                  ),
                  ctePivotedWeeks (WorkDay, Hours) As
                  (
                  SELECT
                  StartDate,
                  MON
                  FROM
                  cteOverlappingWeeks

                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 1, StartDate),
                      TUE
                  FROM
                      cteOverlappingWeeks
                  
                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 2, StartDate),
                      WED
                  FROM
                      cteOverlappingWeeks
                  
                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 3, StartDate),
                      THUR
                  FROM
                      cteOverlappingWeeks
                  
                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 4, StartDate),
                      FRI
                  FROM
                      cteOverlappingWeeks
                  
                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 5, StartDate),
                      SAT
                  FROM
                      cteOverlappingWeeks
                  
                  UNION ALL
                  
                  SELECT
                      DateAdd(day, 6, StartDate),
                      SUN
                  FROM
                      cteOverlappingWeeks
                  

                  )
                  SELECT
                  WorkDay,
                  Hours
                  FROM
                  ctePivotedWeeks
                  WHERE
                  WorkDay Between @SelectedStartDate And @SelectedEndDate
                  ORDER BY
                  WorkDay
                  ;

                  Example: http://www.sqlfiddle.com/#!3/b8a7a/1[^]


                  "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                  "These people looked deep within my soul and assigned me a number based on the order in which I joined" - Homer

                  S J 2 Replies Last reply
                  0
                  • Richard DeemingR Richard Deeming

                    So you essentially want one row per day?

                    DECLARE @SelectedStartDate date = '20130815';
                    DECLARE @SelectedEndDate date = '20130830';

                    WITH cteOverlappingWeeks As
                    (
                    SELECT
                    StartDate,
                    MON,
                    TUE,
                    WED,
                    THUR,
                    FRI,
                    SAT,
                    SUN
                    FROM
                    dbo.Timesheet
                    WHERE
                    StartDate <= @SelectedEndDate
                    And
                    EndDate >= @SelectedStartDate
                    ),
                    ctePivotedWeeks (WorkDay, Hours) As
                    (
                    SELECT
                    StartDate,
                    MON
                    FROM
                    cteOverlappingWeeks

                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 1, StartDate),
                        TUE
                    FROM
                        cteOverlappingWeeks
                    
                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 2, StartDate),
                        WED
                    FROM
                        cteOverlappingWeeks
                    
                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 3, StartDate),
                        THUR
                    FROM
                        cteOverlappingWeeks
                    
                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 4, StartDate),
                        FRI
                    FROM
                        cteOverlappingWeeks
                    
                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 5, StartDate),
                        SAT
                    FROM
                        cteOverlappingWeeks
                    
                    UNION ALL
                    
                    SELECT
                        DateAdd(day, 6, StartDate),
                        SUN
                    FROM
                        cteOverlappingWeeks
                    

                    )
                    SELECT
                    WorkDay,
                    Hours
                    FROM
                    ctePivotedWeeks
                    WHERE
                    WorkDay Between @SelectedStartDate And @SelectedEndDate
                    ORDER BY
                    WorkDay
                    ;

                    Example: http://www.sqlfiddle.com/#!3/b8a7a/1[^]


                    "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                    S Offline
                    S Offline
                    Simon_Whale
                    wrote on last edited by
                    #11

                    :thumbsup: Nice tool never knew about SQLFiddle Thanks :laugh:

                    Every day, thousands of innocent plants are killed by vegetarians. Help end the violence EAT BACON

                    1 Reply Last reply
                    0
                    • S Srinivas Uttareshwar

                      I want to get data on the bases of selected dates i.e start date and endate it might be any dates between the week but the dates stored in the table are start date of the week and end date of the week and days of the week mon,tue,wed,thur,fri,sat,sun.

                      M Offline
                      M Offline
                      Mycroft Holmes
                      wrote on last edited by
                      #12

                      The reason Richard had so much trouble with the query is that your data structure is atrocious, you need to fix that otherwise you are going to have continuing and compounding problems in future. Your time recording table should have 1 record per person per date. The the query would be a very simple one instead of that horror Richard had to supply! He deserves the upvote just for dealing with your structure!

                      Never underestimate the power of human stupidity RAH

                      1 Reply Last reply
                      0
                      • Richard DeemingR Richard Deeming

                        So you essentially want one row per day?

                        DECLARE @SelectedStartDate date = '20130815';
                        DECLARE @SelectedEndDate date = '20130830';

                        WITH cteOverlappingWeeks As
                        (
                        SELECT
                        StartDate,
                        MON,
                        TUE,
                        WED,
                        THUR,
                        FRI,
                        SAT,
                        SUN
                        FROM
                        dbo.Timesheet
                        WHERE
                        StartDate <= @SelectedEndDate
                        And
                        EndDate >= @SelectedStartDate
                        ),
                        ctePivotedWeeks (WorkDay, Hours) As
                        (
                        SELECT
                        StartDate,
                        MON
                        FROM
                        cteOverlappingWeeks

                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 1, StartDate),
                            TUE
                        FROM
                            cteOverlappingWeeks
                        
                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 2, StartDate),
                            WED
                        FROM
                            cteOverlappingWeeks
                        
                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 3, StartDate),
                            THUR
                        FROM
                            cteOverlappingWeeks
                        
                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 4, StartDate),
                            FRI
                        FROM
                            cteOverlappingWeeks
                        
                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 5, StartDate),
                            SAT
                        FROM
                            cteOverlappingWeeks
                        
                        UNION ALL
                        
                        SELECT
                            DateAdd(day, 6, StartDate),
                            SUN
                        FROM
                            cteOverlappingWeeks
                        

                        )
                        SELECT
                        WorkDay,
                        Hours
                        FROM
                        ctePivotedWeeks
                        WHERE
                        WorkDay Between @SelectedStartDate And @SelectedEndDate
                        ORDER BY
                        WorkDay
                        ;

                        Example: http://www.sqlfiddle.com/#!3/b8a7a/1[^]


                        "These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer

                        J Offline
                        J Offline
                        Jorgen Andersson
                        wrote on last edited by
                        #13

                        Have another upvote for the sqlfiddle link.

                        Be excellent to each other. And... PARTY ON, DUDES! Abraham Lincoln

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups