modify this query to have the last mkd.price when fs.END_TIME+ 1 minute

Hello,

How can I modify this query to have the last mkd.price when fs.END_TIME+ 1 minute ?


select fs.SECID, mkd.price, fs.END_TIME, mkd.time
from [test3].[DATA].[dbo].[day_2] mkd,
      [test3].[SEC].[dbo].SECU ks,
      [test4].[PORT].[dbo].[STATS] fs
      where fs.SEID collate SQL_Latin1_General_CP1_CI_AS = ks.SEID
      and ks.SYM = mkd.sec
      and DATEADD(mi,1,fs.END_TIME) = DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()),mkd.time)
      AND cast(fs.END_TIME as time) between '2015-10-02 07:00:00' and '2015-10-02 22:00:00'
      order by fs.END_TIME desc

Thanks

Regards
bibi92Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Jim HornMicrosoft SQL Server Developer, Architect, and AuthorCommented:
Sorry, too early in the morning to understand this question without seeing some sample data, but if it helps check out my article on T-SQL: Identify bad dates in a time series, which demonstrates how to create a multi-nested Common Table Expression ( CTE ) to analyze a time series of data and return what is considered exceptions to business rules.
0
bibi92Author Commented:
fs.END_TIME = 2015-09-21 13:55:03.0000000
mkd.time = 11:54:00
mkd.price = 124.11

Thanks
0
bibi92Author Commented:
Why where DATEADD(minute,1, cast(fs.END_TIME as time))  =    DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()),CAST(mkd.time as time))  
fs.END_TIME = 2015-09-21 13:54:03.0000000
mkd.time = 11:55:00

Thanks
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

PortletPaulfreelancerCommented:
If you cast a value to TIME, then there is no date component at all, hence you cannot do this:

    cast(fs.END_TIME as time) between '2015-10-02 07:00:00' and '2015-10-02 22:00:00'

It's sort of like saying this:

      change(cats to dogs) between cheshire and tabby


So, I have to presume the column fs.END_TIME is datetime (or similar) in which case you probably just do not need the cast( to time)

If fs.END_TIME is not datetime but (say) varchar, then I'm not sure what to do as I don't know the data (content & format for example)

My best guess is that you are after "ONLY the most recent" rows from [test4].[PORT].[dbo].[STATS] and if that guess is correct I would suggest using ROW_NUMBER() OVER()

like this:
SELECT
      fs.SECID
    , mkd.price
    , fs.END_TIME
    , mkd.time
FROM [test3].[DATA].[dbo].[day_2] mkd
      INNER JOIN [test3].[SEC].[dbo].SECU ks ON ks.SYM = mkd.sec
      INNER JOIN (
                  SELECT
                        *
                      , ROW_NUMBER() OVER (PARTITION BY SEID ORDER BY END_TIME DESC) AS rn
                  FROM [test4].[PORT].[dbo].[STATS]
                  WHERE fs.END_TIME BETWEEN '2015-10-02 07:00:00' AND '2015-10-02 22:00:00'
                  ) fs ON ks.SEID = fs.SEID COLLATE SQL_Latin1_General_CP1_CI_AS 
                      AND fs.rn = 1
ORDER BY fs.END_TIME DESC
;

Open in new window

0
bibi92Author Commented:
Thanks but with this query I haven't the price when fs.END_TIME + 1 minute =  mkd.time
fs.END_TIME = 2015-09-21 13:55:03.0000000 local Time
 mkd.time = 11:54:00 GMT Time
 mkd.price = 124.11

Regards
0
Scott PletcherSenior DBACommented:
Maybe this.  Again, without directly usable sample data and expected results, it's difficult to know for sure what results you want.

select fs.SECID, mkd_final.price, fs.END_TIME, mkd_final.time
from [test4].[PORT].[dbo].[STATS] fs,
     [test3].[SEC].[dbo].SECU ks
     outer apply (
         select top (1) mkd.price, mkd.time
         from [test3].[DATA].[dbo].[day_2] mkd
         where ks.SYM = mkd.sec
         --I changed the add 1 min to fs.END_TIME to subtract 1 min from the other side, so that only
         --one side of the equation needed date computations
         and fs.END_TIME = DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) - 1, mkd.time)
          order by mkd.time desc
     ) as mkd_final
     where fs.SEID collate SQL_Latin1_General_CP1_CI_AS = ks.SEID
     and fs.END_TIME between '20151002 07:00:00' and '20151002 22:00:00'
0
bibi92Author Commented:
Hello,

This error is returned :

The multi-part identifier "fs.END_TIME" could not be bound.

Thanks
0
Scott PletcherSenior DBACommented:
Hmm, odd, sorry, don't know what to tell you there.  We should be able to reference a column from the outer query within the outer apply subquery.
0
PortletPaulfreelancerCommented:
>>"The multi-part identifier "fs.END_TIME" could not be bound."

I don't know if this will help, but I have never tried to mix old-style joining syntax (using the where clause) and an apply operator, so perhaps try it using an explicit INNER JOIN
SELECT
      fs.SECID
    , mkd_final.price
    , fs.END_TIME
    , mkd_final.time
FROM [test4].[PORT].[dbo].[STATS] fs
INNER JOIN [test3].[SEC].[dbo].SECU ks ON ks.SEID = fs.SEID COLLATE SQL_Latin1_General_CP1_CI_AS 
           OUTER APPLY (
                 SELECT TOP (1)
                       mkd.price
                     , mkd.time
                 FROM [test3].[DATA].[dbo].[day_2] mkd
                 WHERE ks.SYM = mkd.sec
                       --I changed the add 1 min to fs.END_TIME to subtract 1 min from the other side, so that only
                       --one side of the equation needed date computations
                       AND fs.END_TIME = DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()) - 1, mkd.time)
                 ORDER BY mkd.time DESC
           ) AS mkd_final
WHERE fs.END_TIME BETWEEN '20151002 07:00:00' AND '20151002 22:00:00'

Open in new window

0
Scott PletcherSenior DBACommented:
Yeah, that's a good,  interesting point.  Maybe the mix of JOIN methods "confused" the SQL parser.
0
bibi92Author Commented:
Hello,

I have tested the last query, price and time are null.

Thanks
0
PortletPaulfreelancerCommented:
Well the query works now, that's positive (and interesting)
Using EQUAL is being too restrictive I think.

fs.END_TIME = 2015-09-21 13:55:03.0000000 local Time
 mkd.time = 11:54:00 GMT Time

aside from the timezone, there is also a 3 second difference in the only example data we have seen

So, let's try with BETWEEN
SELECT
      fs.SECID
    , mkd_final.price
    , fs.END_TIME
    , mkd_final.time
FROM [test4].[PORT].[dbo].[STATS] fs
INNER JOIN [test3].[SEC].[dbo].SECU ks ON ks.SEID = fs.SEID COLLATE SQL_Latin1_General_CP1_CI_AS 
           OUTER APPLY (
                 SELECT TOP (1)
                       mkd.price
                     , mkd.time
                 FROM [test3].[DATA].[dbo].[day_2] mkd
                 WHERE ks.SYM = mkd.sec
                       --changed to use a time range of 1 minute, still only one side of the equation needs date computations
                       AND fs.END_TIME BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) - 1, mkd.time)
                                           AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), mkd.time) 
                 ORDER BY mkd.time DESC
           ) AS mkd_final
WHERE fs.END_TIME BETWEEN '20151002 07:00:00' AND '20151002 22:00:00'
;

Open in new window

0
bibi92Author Commented:
Hello,

Thanks, the query return NULL value for time and price columns.
0
PortletPaulfreelancerCommented:
What does this return?

select DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()) ;

and:

Can you provide some inserts for the 3 tables, sufficient to run the query. Due to the precision needed here I would suggest real data inserts rather than manually generated test data. Only a small sample is needed.

anything considered confidential should be masked

{+edit}
oh, and what is your timezone?

fs.END_TIME = 2015-09-21 13:55:03.0000000 local Time <<< i.e. the one referred to here
0
bibi92Author Commented:
select DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()) ; ---> 120

INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-21 08:55:03.00000004', '004000002000PZU', 'to be updated')
INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-21 08:57:10.00000004', '004000002000PZU', 'to be updated')
INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-24 16:56:10.00000004', '0040003302000PZU', 'to be updated')

INSERT INTO [dbo].[DAY2] ([SECID],[TIME] ,[PRICE] ) VALUES ('004000002000PZU','1900-01-01 08:54:00.000', '540.22')
INSERT INTO [dbo].[DAY2] ([SECID] ,[TIME], [PRICE] ) VALUES ('004000002000PZU','1900-01-01 08:54:01.000', '512.22')

Timezone : UTC + 1 HOUR

Thanks
INSERT INTO [dbo].[DAY2] ([[SECID], [TIME] ,[PRICE] ) VALUES ('0040003302000PZU','1900-01-01 08:47:01.000', '582.22')

INSERT INTO [dbo].[SECU] ([SYM] ) VALUES ('004000002000PZU')
INSERT INTO [dbo].[SECU] ([SYM] ) VALUES ('0040003302000PZU')
0
PortletPaulfreelancerCommented:
can you please tell me what data types these are? (e.g. datetime?)
[test4].[PORT].[dbo].[STATS].END_TIME
[test3].[DATA].[dbo].[day_2].time

For both queries below, add your own final where clause please e.g.
WHERE fs.END_TIME BETWEEN '20151002 07:00:00' AND '20151002 22:00:00'


Does this return mkd price or time? (qry1)
SELECT
      fs.SECID
    , mkd_final.price
    , fs.END_TIME
    , mkd_final.time
FROM [dbo].[STATS] fs
INNER JOIN [dbo].SECU ks ON ks.SEID = fs.SEID
          OUTER APPLY (
                 SELECT TOP (1)
                       mkd.price
                     , mkd.time
                 FROM [dbo].[day_2] mkd
                 WHERE ks.SYM = mkd.sec
                       --I changed the add 1 min to fs.END_TIME to subtract 1 min from the other side, so that only
                       --one side of the equation needed date computations
                       --changed to use a time range of 1 minute, still only one side of the equation needs date computations
                       AND fs.END_TIME BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), mkd.time)
                                           AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, mkd.time) 
                 ORDER BY mkd.time DESC
           ) AS mkd_final

Open in new window


If that still returns NULLs, remove the time restriction, and provide the results (query 2)
SELECT
      fs.SECID
    , mkd_final.price
    , fs.END_TIME
    , mkd_final.time
FROM [dbo].[STATS] fs
INNER JOIN [dbo].SECU ks ON ks.SEID = fs.SEID
          OUTER APPLY (
                 SELECT TOP (1)
                       mkd.price
                     , mkd.time
                 FROM [dbo].[day_2] mkd
                 WHERE ks.SYM = mkd.sec
                 ORDER BY mkd.time DESC
           ) AS mkd_final

Open in new window


I have attempted to build a test case, detail:
**MS SQL Server 2014 Schema Setup**:

    CREATE TABLE STATS
        ([SEID] int, [SECID] int, [END_TIME] datetime)
    ;
        
    INSERT INTO STATS
        ([SEID],[SECID], [END_TIME])
    VALUES
        (1001,1, '2015-09-21 13:55:03.000')
    ;
    
    
    CREATE TABLE SECU
        ([SEID] int, [SYM] int)
    ;
        
    INSERT INTO SECU
        ([SEID], [SYM])
    VALUES
        (1001, 2002)
    ;
    
    
    CREATE TABLE day_2
        ([sec] int, [price] numeric, [time] datetime)
    ;
        
    INSERT INTO day_2
        ([sec], [price], [time])
    VALUES
        (2002, 12.3745, '2015-09-21 13:54:00')
    ;
    
**Query 1**:

    select DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()) 

**[Results][2]**:
    |   |
    |---|
    | 0 |
**Query 2**:

    
    
    SELECT
          fs.SECID
        , mkd.price
        , fs.END_TIME
        , mkd.time
        , datediff(second,fs.END_TIME,mkd.time)
        , case when fs.END_TIME BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), mkd.time)
                                    AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, mkd.time) 
                 then 1
                 else null
          end
    FROM [dbo].[STATS] fs
    INNER JOIN [dbo].SECU ks ON ks.SEID = fs.SEID
    inner join [dbo].[day_2] mkd ON ks.SYM = mkd.sec
    

**[Results][3]**:
    | SECID | price |                    END_TIME |                        time |     |   |
    |-------|-------|-----------------------------|-----------------------------|-----|---|
    |     1 |    12 | September, 21 2015 13:55:03 | September, 21 2015 13:54:00 | -63 | 1 |
**Query 3**:

    
    
    
    SELECT
          fs.SECID
        , mkd_final.price
        , fs.END_TIME
        , mkd_final.time
    FROM [dbo].[STATS] fs
    INNER JOIN [dbo].SECU ks ON ks.SEID = fs.SEID
              OUTER APPLY (
                     SELECT TOP (1)
                           mkd.price
                         , mkd.time
                     FROM [dbo].[day_2] mkd
                     WHERE ks.SYM = mkd.sec
                           --I changed the add 1 min to fs.END_TIME to subtract 1 min from the other side, so that only
                           --one side of the equation needed date computations
                           --changed to use a time range of 1 minute, still only one side of the equation needs date computations
                           AND fs.END_TIME BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), mkd.time)
                                               AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, mkd.time) 
                     ORDER BY mkd.time DESC
               ) AS mkd_final

**[Results][4]**:
    | SECID | price |                    END_TIME |                        time |
    |-------|-------|-----------------------------|-----------------------------|
    |     1 |    12 | September, 21 2015 13:55:03 | September, 21 2015 13:54:00 |

  [1]: http://sqlfiddle.com/#!6/e7f73a/3
  [2]: http://sqlfiddle.com/#!6/e7f73a/3/0
  [3]: http://sqlfiddle.com/#!6/e7f73a/3/1
  [4]: http://sqlfiddle.com/#!6/e7f73a/3/2

Open in new window

0
PortletPaulfreelancerCommented:
OK, we crossed over, the comment immediately above this was made BEFORE I saw the inserts.

Now I can see a problem that wasn't apparent before.

INSERT INTO [dbo].[DAY2] ([[SECID], [TIME] ,[PRICE] )
VALUES ('0040003302000PZU','1900-01-01 08:47:01.000', '582.22')

we were never going to get to 1900-01-01 by deducting a timezone difference and 1 minute
0
PortletPaulfreelancerCommented:
Please try this one instead of those I saw before the inserts (query 3)
SELECT
      fs.SECID
    , mkd_final.price
    , fs.END_TIME
    , mkd_final.time
FROM [dbo].[STATS] fs
INNER JOIN [dbo].SECU ks ON ks.SEID = fs.SEID
          OUTER APPLY (
                 SELECT TOP (1)
                       mkd.price
                     , mkd.time
                 FROM [dbo].[day_2] mkd
                 WHERE ks.SYM = mkd.sec
                       --I changed the add 1 min to fs.END_TIME to subtract 1 min from the other side, so that only
                       --one side of the equation needed date computations
                       --changed to use a time range of 1 minute, still only one side of the equation needs date computations
                       AND cast(fs.END_TIME as time) BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), cast(mkd.time as time))
                                                         AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, cast(mkd.time as time)) 
                 ORDER BY mkd.time DESC
           ) AS mkd_final

Open in new window


please identify which query you are using when reporting back (query 1 or 2 or 3)
0
PortletPaulfreelancerCommented:
http://sqlfiddle.com/#!6/79adf2/3

    CREATE TABLE STATS
        ([SECID] varchar(40), [END_TIME] datetime2, [RV1MIN] varchar(100))
    ;
    
    INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-21 08:55:03.00000004', '004000002000PZU', 'to be updated')
    INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-21 08:57:10.00000004', '004000002000PZU', 'to be updated')
    INSERT INTO [dbo].[STATS] ([END_TIME] ,[SECID] ,[RV1MIN] ) VALUES ('2014-09-24 16:56:10.00000004', '0040003302000PZU', 'to be updated')
    
    CREATE TABLE SECU
        ([SYM] varchar(40))
    ;
    INSERT INTO [dbo].[SECU] ([SYM] ) VALUES ('004000002000PZU')
    INSERT INTO [dbo].[SECU] ([SYM] ) VALUES ('0040003302000PZU')
    
    CREATE TABLE DAY2
        ([SECID] varchar(40), [price] decimal(18,3), [time] datetime)
    ;
    
    INSERT INTO [dbo].[DAY2] ([SECID],[TIME] ,[PRICE] ) VALUES ('004000002000PZU','1900-01-01 08:54:00.000', '540.22')
    INSERT INTO [dbo].[DAY2] ([SECID] ,[TIME], [PRICE] ) VALUES ('004000002000PZU','1900-01-01 08:54:01.000', '512.22')
    INSERT INTO [dbo].[DAY2] ([SECID], [TIME] ,[PRICE] ) VALUES ('0040003302000PZU','1900-01-01 08:47:01.000', '582.22')
    
    
**Query 1**:

    SELECT
          fs.SECID
        , mkd.price
        , fs.END_TIME
        , mkd.time
        , datediff(second,cast(fs.END_TIME as time),cast(mkd.time as time))
        , case when cast(fs.END_TIME as time) BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), cast(mkd.time as time))
                                                  AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, cast(mkd.time as time)) 
                 then 1
                 else null
          end
    FROM [dbo].[STATS] fs
    INNER JOIN [dbo].SECU ks ON ks.SYM = fs.SECID
    inner join [dbo].[DAY2] mkd ON ks.SYM = mkd.secid
    

**[Results][2]**:
    |            SECID |  price |                    END_TIME |                      time |        |        |
    |------------------|--------|-----------------------------|---------------------------|--------|--------|
    |  004000002000PZU | 540.22 | 2014-09-21 08:55:03.0000000 | January, 01 1900 08:54:00 |    -63 |      1 |
    |  004000002000PZU | 512.22 | 2014-09-21 08:55:03.0000000 | January, 01 1900 08:54:01 |    -62 |      1 |
    |  004000002000PZU | 540.22 | 2014-09-21 08:57:10.0000000 | January, 01 1900 08:54:00 |   -190 | (null) |
    |  004000002000PZU | 512.22 | 2014-09-21 08:57:10.0000000 | January, 01 1900 08:54:01 |   -189 | (null) |
    | 0040003302000PZU | 582.22 | 2014-09-24 16:56:10.0000000 | January, 01 1900 08:47:01 | -29349 | (null) |

  [1]: http://sqlfiddle.com/#!6/79adf2/3
  [2]: http://sqlfiddle.com/#!6/79adf2/3/0

Open in new window

0
PortletPaulfreelancerCommented:
est-il correct ou non ?
0
bibi92Author Commented:
Hello,

I will test it this week-end.

Thanks

Regards
0
bibi92Author Commented:
Hello,

The tables have several millions of rows and the query return any result after 10 minutes.
Thanks
0
PortletPaulfreelancerCommented:
It is slow, but are the results correct?

The slowness is most probably due to all of the functions used to achieve this join and forcing table scans.

AND cast(fs.END_TIME as time)
  BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), cast(mkd.time as time))
    AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, cast(mkd.time as time))

The 3 casts involved certainly don't help performance.

What freedoms do you have to alter the tables and/or add indexes?
Can you get an execution plan? (.sqlplan file)
0
bibi92Author Commented:
No because I used linked servers. Thanks
0
PortletPaulfreelancerCommented:
ok. still not sure if the query is producing the correct results, I hope it is.

bon soir
0
bibi92Author Commented:
Hello,

It is not correct. I haven't the last mkd.price when fs.END_TIME+ 1 minute.

Thanks
0
bibi92Author Commented:
I have to get the last price, I try to modify the query , the price is returned correcty but I search only to have the last price:
SELECT
          fs.SECID
        , mkd.price
        , fs.END_TIME
        , mkd.time
        , datediff(second,cast(fs.END_TIME as time),cast(mkd.time as time))
        , case when cast(fs.END_TIME as time) BETWEEN DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()), cast(mkd.time as time))
                                                  AND DATEADD(minute, DATEDIFF(minute,getutcdate(),getdate()) +2, cast(mkd.time as time))
                 then 1
                 else null
          end
    FROM [dbo].[STATS] fs
    INNER JOIN [dbo].SECU ks ON ks.SYM = fs.SECID
    inner join [dbo].[DAY2] mkd ON ks.SYM = mkd.secid

Thanks
0
PortletPaulfreelancerCommented:
bibi92

When you say "I have to get the last price" do you mean:

Get the MOST RECENT price?

or, is it more complex than that?
0
bibi92Author Commented:
How van I filter on datediff(second,cast(fs.END_TIME as time),cast(mkd.time as time)) > = 60

Thanks
0
PortletPaulfreelancerCommented:
just put "where" in front of it

    FROM [dbo].[STATS] fs
    INNER JOIN [dbo].SECU ks ON ks.SYM = fs.SECID
    inner join [dbo].[DAY2] mkd ON ks.SYM = mkd.secid
where datediff(second,cast(fs.END_TIME as time),cast(mkd.time as time)) > = 60
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
bibi92Author Commented:
I have already tried it. All lines are returned. Thanks
0
bibi92Author Commented:
Datediff return -63 and not 63
Thanks
0
PortletPaulfreelancerCommented:
then reverse the sequence of the last 2 parameters in datediff

from this:
where datediff(second,cast(fs.END_TIME as time),cast(mkd.time as time)) > = 60

to this:
where datediff(second,cast(mkd.time as time),cast(fs.END_TIME as time)) > = 60
0
bibi92Author Commented:
Same result all rows have been returned. Thanks
0
bibi92Author Commented:
I have modified > =  by between 60 and 120
0
bibi92Author Commented:
Thanks
0
PortletPaulfreelancerCommented:
Hooray!  Well done.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft SQL Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.