Query database by date and send results to table

  • I'm a bit of a SQL newb but have been tasked with coming up with some code to retrieve values from a historian database. I'm retrieving the name of an object (tag) and its value at a specific time every month of the year. However, the year will be user defined parameter coming from a report. So if the user selects 2014 it should query on 1/1/2014,2/1/2014 and so on.

    I came up with the simple part of the query which is looking up the tag names and associated values:

    SELECT Tagname,value

    From runtime.dbo.History

    WHERE Tagname IN ('Tag1', 'Tag2')

    and wwVersion = 'Latest'

    and DateTime = @Date

    Here are the issues I need to solve:

    1. I can manually set the @Date but I'd like to have it do whats described above. I'm thinking some type of loop might be used?

    2. I'm not sure how to output it into table format to look like:

    Tag 1, (jan value), (feb value), (mar value), etc...

    Tag 2, (jan value), (feb value), (mar value), etc...

    Any help would be appreciated. Thanks!

  • You definitely don't need a loop for this. You can do this using a tally or a calendar table (not totally sure which one fits best). In order to help we will need a few things:

    1. Sample DDL in the form of CREATE TABLE statements

    2. Sample data in the form of INSERT INTO statements

    3. Expected results based on the sample data

    Please take a few minutes and read the first article in my signature for best practices when posting questions.

    _______________________________________________________________

    Need help? Help us help you.

    Read the article at http://www.sqlservercentral.com/articles/Best+Practices/61537/ for best practices on asking questions.

    Need to split a string? Try Jeff Modens splitter http://www.sqlservercentral.com/articles/Tally+Table/72993/.

    Cross Tabs and Pivots, Part 1 – Converting Rows to Columns - http://www.sqlservercentral.com/articles/T-SQL/63681/
    Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs - http://www.sqlservercentral.com/articles/Crosstab/65048/
    Understanding and Using APPLY (Part 1) - http://www.sqlservercentral.com/articles/APPLY/69953/
    Understanding and Using APPLY (Part 2) - http://www.sqlservercentral.com/articles/APPLY/69954/

  • Can't tell exactly without the DDL as mentioned by Sean.

    But as you said you need get all results when a user inputs a date and neet to search with Year part. One option is to do like this.

    declare @date datetime;--'11-2-2014'

    SELECT Tagname,value

    From runtime.dbo.History

    WHERE Tagname IN ('Tag1', 'Tag2')

    and wwVersion = 'Latest'

    and

    DATEPART(YY,datetime)= DATEPART(YY,@date)

Viewing 3 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic. Login to reply