File: test_sqlserver.test_slow

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (649 lines) | stat: -rw-r--r-- 35,786 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
# name: test/sqlserver/test_sqlserver.test_slow
# description: SQL Server functions tests
# group: [sqlserver]

statement ok
PRAGMA default_null_order='NULLS LAST'

statement ok
PRAGMA threads=4

statement ok
PRAGMA verify_parallelism

statement ok
CREATE SCHEMA Sales;

statement ok
CREATE TABLE Sales.SalesPerson( BusinessEntityID int NOT NULL, TerritoryID int, SalesQuota decimal(22,4), Bonus decimal(22,4) NOT NULL, CommissionPct decimal(10,4) NOT NULL, SalesYTD decimal(22,4) NOT NULL, SalesLastYear decimal(22,4) NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );

statement ok
COPY Sales.SalesPerson FROM 'test/sqlserver/data/SalesPerson.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Sales.SalesTaxRate( SalesTaxRateID int NOT NULL, StateProvinceID int NOT NULL, TaxType tinyint NOT NULL, TaxRate decimal(10,4) NOT NULL , Name string NOT NULL, rowguid string , ModifiedDate datetime NOT NULL );

statement ok
COPY Sales.SalesTaxRate FROM 'test/sqlserver/data/SalesTaxRate.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Sales.SalesPersonQuotaHistory( BusinessEntityID int NOT NULL, QuotaDate datetime NOT NULL, SalesQuota decimal(22,4) NOT NULL, rowguid string , ModifiedDate datetime NOT NULL);

statement ok
COPY Sales.SalesPersonQuotaHistory FROM 'test/sqlserver/data/SalesPersonQuotaHistory.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Sales.SalesTerritory( TerritoryID int NOT NULL, Name string NOT NULL, CountryRegionCode string NOT NULL, Group_ string NOT NULL, SalesYTD decimal(22,4) NOT NULL , SalesLastYear decimal(22,4) NOT NULL , CostYTD decimal(22,4) NOT NULL , CostLastYear decimal(22,4) NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );

statement ok
COPY Sales.SalesTerritory FROM 'test/sqlserver/data/SalesTerritory.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE SCHEMA HumanResources;

statement ok
CREATE TABLE HumanResources.Employee( BusinessEntityID int NOT NULL, NationalIDNumber string NOT NULL, LoginID string NOT NULL, OrganizationNode VARCHAR, 	OrganizationLevel integer not null, JobTitle string NOT NULL, BirthDate date NOT NULL, MaritalStatus string NOT NULL, Gender string NOT NULL, HireDate date NOT NULL, SalariedFlag string NOT NULL , VacationHours smallint NOT NULL , SickLeaveHours smallint NOT NULL, CurrentFlag string NOT NULL , rowguid string , ModifiedDate datetime NOT NULL);

statement ok
COPY HumanResources.Employee FROM 'test/sqlserver/data/Employee.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE HumanResources.EmployeePayHistory( BusinessEntityID int NOT NULL, RateChangeDate datetime NOT NULL, Rate decimal(22,4) NOT NULL, PayFrequency tinyint NOT NULL, ModifiedDate datetime NOT NULL);

statement ok
COPY HumanResources.EmployeePayHistory FROM 'test/sqlserver/data/EmployeePayHistory.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE HumanResources.EmployeeDepartmentHistory( BusinessEntityID int NOT NULL, DepartmentID smallint NOT NULL, ShiftID tinyint NOT NULL, StartDate date NOT NULL, EndDate date, ModifiedDate datetime NOT NULL );

statement ok
COPY HumanResources.EmployeeDepartmentHistory FROM 'test/sqlserver/data/EmployeeDepartmentHistory.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE HumanResources.Department( DepartmentID smallint NOT NULL, Name string NOT NULL, GroupName string NOT NULL, ModifiedDate datetime NOT NULL );

statement ok
COPY HumanResources.Department FROM 'test/sqlserver/data/Department.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE HumanResources.Shift( ShiftID tinyint NOT NULL, Name string NOT NULL, StartTime string NOT NULL, EndTime string NOT NULL, ModifiedDate datetime NOT NULL );

statement ok
COPY HumanResources.Shift FROM 'test/sqlserver/data/Shift.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE SCHEMA Person;

statement ok
CREATE TABLE Person.Person( BusinessEntityID int NOT NULL, PersonType string NOT NULL, NameStyle string NOT NULL, Title string , FirstName string NOT NULL, MiddleName string, LastName string NOT NULL, Suffix string, EmailPromotion int NOT NULL, AdditionalContactInfo string, Demographics string, rowguid string, ModifiedDate datetime NOT NULL);

statement ok
COPY Person.Person FROM 'test/sqlserver/data/Person.csv.gz' (DELIMITER '|', QUOTE '*', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.BusinessEntityAddress( BusinessEntityID int NOT NULL, AddressID int NOT NULL, AddressTypeID int NOT NULL, rowguid string, ModifiedDate datetime NOT NULL ) ;

statement ok
COPY Person.BusinessEntityAddress FROM 'test/sqlserver/data/BusinessEntityAddress.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.Address( AddressID int NOT NULL, AddressLine1 string NOT NULL, AddressLine2 string, City string NOT NULL, StateProvinceID int NOT NULL, PostalCode string NOT NULL, SpatialLocation string, rowguid string, ModifiedDate datetime NOT NULL );

statement ok
COPY Person.Address FROM 'test/sqlserver/data/Address.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.StateProvince( StateProvinceID int NOT NULL, StateProvinceCode string NOT NULL, CountryRegionCode string NOT NULL, IsOnlyStateProvinceFlag string NOT NULL , Name string NOT NULL, TerritoryID int NOT NULL, rowguid string , ModifiedDate datetime NOT NULL);

statement ok
COPY Person.StateProvince FROM 'test/sqlserver/data/StateProvince.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.CountryRegion( CountryRegionCode string NOT NULL, Name string NOT NULL, ModifiedDate datetime NOT NULL );

statement ok
COPY Person.CountryRegion FROM 'test/sqlserver/data/CountryRegion.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.EmailAddress( BusinessEntityID int NOT NULL, EmailAddressID int NOT NULL, EmailAddress string, rowguid string , ModifiedDate datetime NOT NULL );

statement ok
COPY Person.EmailAddress FROM 'test/sqlserver/data/EmailAddress.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.PersonPhone( BusinessEntityID int NOT NULL, PhoneNumber string NOT NULL, PhoneNumberTypeID int NOT NULL, ModifiedDate datetime NOT NULL );

statement ok
COPY Person.PersonPhone FROM 'test/sqlserver/data/PersonPhone.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);

statement ok
CREATE TABLE Person.PhoneNumberType( PhoneNumberTypeID int NOT NULL, Name string NOT NULL, ModifiedDate datetime NOT NULL );

statement ok
COPY Person.PhoneNumberType FROM 'test/sqlserver/data/PhoneNumberType.csv.gz' (DELIMITER '|', AUTO_DETECT TRUE);

statement ok
CREATE SCHEMA Production;

statement ok
CREATE TABLE Production.Product( ProductID int NOT NULL, Name string NOT NULL, ProductNumber string NOT NULL, MakeFlag string NOT NULL , FinishedGoodsFlag string NOT NULL , Color string, SafetyStockLevel smallint NOT NULL, ReorderPoint smallint NOT NULL, StandardCost decimal(22,4) NOT NULL, ListPrice decimal(22,4) NOT NULL, Size string, SizeUnitMeasureCode string, WeightUnitMeasureCode string, Weight decimal(8, 2), DaysToManufacture int NOT NULL, ProductLine string, Class string, Style string, ProductSubcategoryID int, ProductModelID int, SellStartDate datetime NOT NULL, SellEndDate datetime, DiscontinuedDate datetime, rowguid string  , ModifiedDate datetime NOT NULL );

statement ok
COPY Production.Product FROM 'test/sqlserver/data/Product.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
 CREATE TABLE Production.ProductInventory( ProductID int NOT NULL, LocationID smallint NOT NULL, Shelf string NOT NULL, Bin tinyint NOT NULL, Quantity smallint NOT NULL , rowguid string , ModifiedDate datetime NOT NULL );

statement ok
COPY Production.ProductInventory FROM 'test/sqlserver/data/ProductInventory.csv.gz' (DELIMITER '	', AUTO_DETECT TRUE);

statement ok
CREATE VIEW Sales.vSalesPerson AS SELECT s.BusinessEntityID ,p.Title ,p.FirstName ,p.MiddleName ,p.LastName ,p.Suffix ,e.JobTitle ,pp.PhoneNumber ,pnt.Name AS PhoneNumberType ,ea.EmailAddress ,p.EmailPromotion ,a.AddressLine1 ,a.AddressLine2 ,a.City ,sp.Name AS StateProvinceName ,a.PostalCode ,cr.Name AS CountryRegionName ,st.Name AS TerritoryName ,st.Group_ AS TerritoryGroup ,s.SalesQuota ,s.SalesYTD ,s.SalesLastYear FROM Sales.SalesPerson s INNER JOIN HumanResources.Employee e ON e.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.Person p ON p.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.BusinessEntityAddress bea ON bea.BusinessEntityID = s.BusinessEntityID INNER JOIN Person.Address a ON a.AddressID = bea.AddressID INNER JOIN Person.StateProvince sp ON sp.StateProvinceID = a.StateProvinceID INNER JOIN Person.CountryRegion cr ON cr.CountryRegionCode = sp.CountryRegionCode LEFT OUTER JOIN Sales.SalesTerritory st ON st.TerritoryID = s.TerritoryID LEFT OUTER JOIN Person.EmailAddress ea ON ea.BusinessEntityID = p.BusinessEntityID LEFT OUTER JOIN Person.PersonPhone pp ON pp.BusinessEntityID = p.BusinessEntityID LEFT OUTER JOIN Person.PhoneNumberType pnt ON pnt.PhoneNumberTypeID = pp.PhoneNumberTypeID;

statement ok
CREATE VIEW HumanResources.vEmployeeDepartmentHistory AS SELECT e.BusinessEntityID ,p.Title ,p.FirstName ,p.MiddleName ,p.LastName ,p.Suffix ,s.Name AS Shift ,d.Name AS Department ,d.GroupName ,edh.StartDate ,edh.EndDate FROM HumanResources.Employee e INNER JOIN Person.Person p ON p.BusinessEntityID = e.BusinessEntityID INNER JOIN HumanResources.EmployeeDepartmentHistory edh ON e.BusinessEntityID = edh.BusinessEntityID INNER JOIN HumanResources.Department d ON edh.DepartmentID = d.DepartmentID INNER JOIN HumanResources.Shift s ON s.ShiftID = edh.ShiftID;

# https:docs.microsoft.com/en-us/sql/t-sql/functions/avg-transact-sql?view=sql-server-2017
query RR
SELECT AVG(VacationHours)AS a, SUM(SickLeaveHours) AS b  FROM HumanResources.Employee WHERE JobTitle LIKE 'Vice President%';
----
25.000000	97.000000

query IRR
SELECT TerritoryID, AVG(Bonus)as a, SUM(SalesYTD) as b FROM Sales.SalesPerson GROUP BY TerritoryID order by TerritoryID;
----
1	4133.3333333333333333	4502152.2674
2	4100.0000000000000000	3763178.1787
3	2500.0000000000000000	3189418.3662
4	2775.0000000000000000	6709904.1666
5	6700.0000000000000000	2315185.6110
6	2750.0000000000000000	4058260.1825
7	985.0000000000000000	3121616.3202
8	75.0000000000000000	1827066.7118
9	5650.0000000000000000	1421810.9242
10	5150.0000000000000000	4116871.2277
NULL	0.00000000000000000000	1252127.9471


query R
SELECT AVG(DISTINCT ListPrice) FROM Production.Product;
----
437.4042718446601942

query R
SELECT AVG(ListPrice) FROM Production.Product;
----
438.6662500000000000

query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY TerritoryID, SalesYear, BusinessEntityID;
----
280	1	2011	1352577.1325	1462795.035400000000	2925590.0708
283	1	2011	1573012.9383	1462795.035400000000	2925590.0708
284	1	2012	1576562.1966	1500717.422466666667	4502152.2674
275	2	2011	3763178.1787	3763178.178700000000	3763178.1787
277	3	2011	3189418.3662	3189418.366200000000	3189418.3662
276	4	2011	4251368.5497	3354952.083300000000	6709904.1666
281	4	2011	2458535.6169	3354952.083300000000	6709904.1666
274	NULL	2010	559697.5639	559697.563900000000	559697.5639
287	NULL	2012	519905.9320	539801.747950000000	1079603.4959
285	NULL	2013	172524.4512	417375.982366666667	1252127.9471

query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD  ,AVG(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY SalesYear, TerritoryID, BusinessEntityID;
----
274	NULL	2010	559697.5639	559697.563900000000	559697.5639
280	1	2011	1352577.1325	2449684.049457142857	17147788.3462
283	1	2011	1573012.9383	2449684.049457142857	17147788.3462
275	2	2011	3763178.1787	2449684.049457142857	17147788.3462
277	3	2011	3189418.3662	2449684.049457142857	17147788.3462
276	4	2011	4251368.5497	2449684.049457142857	17147788.3462
281	4	2011	2458535.6169	2449684.049457142857	17147788.3462
284	1	2012	1576562.1966	2138250.719422222222	19244256.4748
287	NULL	2012	519905.9320	2138250.719422222222	19244256.4748
285	NULL	2013	172524.4512	1941678.092600000000	19416780.9260

# https:docs.microsoft.com/en-us/sql/t-sql/functions/count-transact-sql?view=sql-server-2017
query I
SELECT COUNT(DISTINCT JobTitle) FROM HumanResources.Employee;
----
67

query I
SELECT COUNT(*) FROM HumanResources.Employee;
----
290

query IR
SELECT COUNT(*), AVG(Bonus) FROM Sales.SalesPerson WHERE SalesQuota > 25000;
----
14	3472.1428571428571429

query TRRRI
SELECT DISTINCT Name, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control	10.2500	17.7885	14.3884600000000000	5
Engineering	32.6923	63.4615	40.1442166666666667	6
Executive	39.0600	125.5000	68.3034750000000000	4
Facilities and Maintenance	9.2500	24.0385	13.0316000000000000	7
Finance	13.4615	43.2692	23.9350900000000000	10
Human Resources	13.9423	27.1394	18.0248166666666667	6
Information Services	27.4038	50.4808	34.1586300000000000	10
Marketing	13.4615	37.5000	18.4318181818181818	11
Production	6.5000	84.1346	13.5537671794871795	195
Production Control	8.6200	24.5192	16.7746125000000000	8
Purchasing	9.8600	30.0000	18.0202000000000000	14
Quality Assurance	10.5769	28.8462	15.4647333333333333	6
Research and Development	40.8654	50.4808	43.6731000000000000	4
Sales	23.0769	72.1154	29.9719444444444444	18
Shipping and Receiving	9.0000	19.2308	10.8718000000000000	6
Tool Design	8.6200	29.8462	23.5054000000000000	6

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/max-transact-sql?view=sql-server-2017
query R
SELECT MAX(TaxRate) FROM Sales.SalesTaxRate;
----
19.600000

query TRRRI
SELECT DISTINCT Name, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control	10.2500	17.7885	14.3884600000000000	5
Engineering	32.6923	63.4615	40.1442166666666667	6
Executive	39.0600	125.5000	68.3034750000000000	4
Facilities and Maintenance	9.2500	24.0385	13.0316000000000000	7
Finance	13.4615	43.2692	23.9350900000000000	10
Human Resources	13.9423	27.1394	18.0248166666666667	6
Information Services	27.4038	50.4808	34.1586300000000000	10
Marketing	13.4615	37.5000	18.4318181818181818	11
Production	6.5000	84.1346	13.5537671794871795	195
Production Control	8.6200	24.5192	16.7746125000000000	8
Purchasing	9.8600	30.0000	18.0202000000000000	14
Quality Assurance	10.5769	28.8462	15.4647333333333333	6
Research and Development	40.8654	50.4808	43.6731000000000000	4
Sales	23.0769	72.1154	29.9719444444444444	18
Shipping and Receiving	9.0000	19.2308	10.8718000000000000	6
Tool Design	8.6200	29.8462	23.5054000000000000	6

query R
SELECT MIN(TaxRate) FROM Sales.SalesTaxRate;
----
5.000000

query TRRRI
SELECT DISTINCT Name , MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary , MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary , AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary ,COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept FROM HumanResources.EmployeePayHistory AS eph JOIN HumanResources.EmployeeDepartmentHistory AS edh ON eph.BusinessEntityID = edh.BusinessEntityID JOIN HumanResources.Department AS d ON d.DepartmentID = edh.DepartmentID WHERE edh.EndDate IS NULL ORDER BY Name;
----
Document Control	10.2500	17.7885	14.3884600000000000	5
Engineering	32.6923	63.4615	40.1442166666666667	6
Executive	39.0600	125.5000	68.3034750000000000	4
Facilities and Maintenance	9.2500	24.0385	13.0316000000000000	7
Finance	13.4615	43.2692	23.9350900000000000	10
Human Resources	13.9423	27.1394	18.0248166666666667	6
Information Services	27.4038	50.4808	34.1586300000000000	10
Marketing	13.4615	37.5000	18.4318181818181818	11
Production	6.5000	84.1346	13.5537671794871795	195
Production Control	8.6200	24.5192	16.7746125000000000	8
Purchasing	9.8600	30.0000	18.0202000000000000	14
Quality Assurance	10.5769	28.8462	15.4647333333333333	6
Research and Development	40.8654	50.4808	43.6731000000000000	4
Sales	23.0769	72.1154	29.9719444444444444	18
Shipping and Receiving	9.0000	19.2308	10.8718000000000000	6
Tool Design	8.6200	29.8462	23.5054000000000000	6

# https:docs.microsoft.com/en-us/sql/t-sql/functions/sum-transact-sql?view=sql-server-2017
query TRR
SELECT Color, SUM(ListPrice), SUM(StandardCost) FROM Production.Product WHERE Color IS NOT NULL AND ListPrice != 0.00 AND Name LIKE 'Mountain%' GROUP BY Color ORDER BY Color;
----
Black	27404.8400	15214.9616
Silver	26462.8400	14665.6792
White	19.0000	6.7926

query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD ,AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY TerritoryID,SalesYear, BusinessEntityID;
----
280	1	2011	1352577.1325	1462795.035400000000	2925590.0708
283	1	2011	1573012.9383	1462795.035400000000	2925590.0708
284	1	2012	1576562.1966	1500717.422466666667	4502152.2674
275	2	2011	3763178.1787	3763178.178700000000	3763178.1787
277	3	2011	3189418.3662	3189418.366200000000	3189418.3662
276	4	2011	4251368.5497	3354952.083300000000	6709904.1666
281	4	2011	2458535.6169	3354952.083300000000	6709904.1666
274	NULL	2010	559697.5639	559697.563900000000	559697.5639
287	NULL	2012	519905.9320	539801.747950000000	1079603.4959
285	NULL	2013	172524.4512	417375.982366666667	1252127.9471

query IIIRRR
SELECT BusinessEntityID, TerritoryID ,YEAR(ModifiedDate) AS SalesYear ,SalesYTD  ,AVG(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS MovingAvg ,SUM(SalesYTD) OVER (ORDER BY YEAR(ModifiedDate) ) AS CumulativeTotal FROM Sales.SalesPerson WHERE TerritoryID IS NULL OR TerritoryID < 5 ORDER BY SalesYear, TerritoryID, BusinessEntityID;
----
274	NULL	2010	559697.5639	559697.563900000000	559697.5639
280	1	2011	1352577.1325	2449684.049457142857	17147788.3462
283	1	2011	1573012.9383	2449684.049457142857	17147788.3462
275	2	2011	3763178.1787	2449684.049457142857	17147788.3462
277	3	2011	3189418.3662	2449684.049457142857	17147788.3462
276	4	2011	4251368.5497	2449684.049457142857	17147788.3462
281	4	2011	2458535.6169	2449684.049457142857	17147788.3462
284	1	2012	1576562.1966	2138250.719422222222	19244256.4748
287	NULL	2012	519905.9320	2138250.719422222222	19244256.4748
285	NULL	2013	172524.4512	1941678.092600000000	19416780.9260

# https:docs.microsoft.com/en-us/sql/t-sql/functions/var-transact-sql?view=sql-server-2017
#  TODO not supported
# SELECT VAR(Bonus) FROM Sales.SalesPerson;

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/cume-dist-transact-sql?view=sql-server-2017
query TTRRR
SELECT Department, LastName, Rate, CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist, PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY Department, Rate DESC, LastName;
----
Document Control	Arifin	17.7885	1	1
Document Control	Kharatishvili	16.8269	0.8	0.5
Document Control	Norred	16.8269	0.8	0.5
Document Control	Berge	10.2500	0.4	0
Document Control	Chai	10.2500	0.4	0
Information Services	Trenary	50.4808	1	1
Information Services	Conroy	39.6635	0.9	0.8888888888888888
Information Services	Ajenstat	38.4615	0.8	0.6666666666666666
Information Services	Wilson	38.4615	0.8	0.6666666666666666
Information Services	Connelly	32.4519	0.6	0.4444444444444444
Information Services	Sharma	32.4519	0.6	0.4444444444444444
Information Services	Bacon	27.4038	0.4	0
Information Services	Berg	27.4038	0.4	0
Information Services	Bueno	27.4038	0.4	0
Information Services	Meyyappan	27.4038	0.4	0

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/first-value-transact-sql?view=sql-server-2017
query TRT
SELECT Name, ListPrice, FIRST_VALUE(Name) OVER (ORDER BY ListPrice ASC) AS LeastExpensive FROM Production.Product WHERE ProductSubcategoryID = 37 ORDER BY ListPrice, Name DESC;
----
Patch Kit/8 Patches	2.2900	Patch Kit/8 Patches
Road Tire Tube	3.9900	Patch Kit/8 Patches
Touring Tire Tube	4.9900	Patch Kit/8 Patches
Mountain Tire Tube	4.9900	Patch Kit/8 Patches
LL Road Tire	21.4900	Patch Kit/8 Patches
ML Road Tire	24.9900	Patch Kit/8 Patches
LL Mountain Tire	24.9900	Patch Kit/8 Patches
Touring Tire	28.9900	Patch Kit/8 Patches
ML Mountain Tire	29.9900	Patch Kit/8 Patches
HL Road Tire	32.6000	Patch Kit/8 Patches
HL Mountain Tire	35.0000	Patch Kit/8 Patches

query TTIT
SELECT JobTitle, LastName, VacationHours, FIRST_VALUE(LastName) OVER (PARTITION BY JobTitle ORDER BY VacationHours ASC ROWS UNBOUNDED PRECEDING ) AS FewestVacationHours FROM HumanResources.Employee AS e INNER JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ORDER BY JobTitle, LastName;
----
1160 values hashing to 2d7dea029628bcba179722012d0e5865

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/last-value-transact-sql?view=sql-server-2017
query TTRTT
SELECT Department, LastName, Rate, HireDate, LAST_VALUE(HireDate) OVER (PARTITION BY Department ORDER BY Rate, LastName) AS LastValue FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS eph ON eph.BusinessEntityID = edh.BusinessEntityID INNER JOIN HumanResources.Employee AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY 1, 3, 2, 4, 5;
----
Document Control	Berge	10.2500	2009-02-09	2009-02-09
Document Control	Chai	10.2500	2009-01-22	2009-01-22
Document Control	Kharatishvili	16.8269	2008-12-16	2008-12-16
Document Control	Norred	16.8269	2009-03-06	2009-03-06
Document Control	Arifin	17.7885	2009-01-04	2009-01-04
Information Services	Bacon	27.4038	2009-01-11	2009-01-11
Information Services	Berg	27.4038	2009-02-16	2009-02-16
Information Services	Bueno	27.4038	2008-12-23	2008-12-23
Information Services	Meyyappan	27.4038	2009-02-03	2009-02-03
Information Services	Connelly	32.4519	2009-02-23	2009-02-23
Information Services	Sharma	32.4519	2008-12-04	2008-12-04
Information Services	Ajenstat	38.4615	2009-01-17	2009-01-17
Information Services	Wilson	38.4615	2009-01-22	2009-01-22
Information Services	Conroy	39.6635	2009-02-04	2009-02-04
Information Services	Trenary	50.4808	2008-12-11	2008-12-11


query IIIRRR
SELECT BusinessEntityID, DATEPART('QUARTER', QuotaDate) AS Quarter, YEAR(QuotaDate) AS SalesYear, SalesQuota AS QuotaThisQuarter, SalesQuota - FIRST_VALUE(SalesQuota) OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate) ORDER BY DATEPART('QUARTER',QuotaDate) ) AS DifferenceFromFirstQuarter, SalesQuota - LAST_VALUE(SalesQuota) OVER (PARTITION BY BusinessEntityID, YEAR(QuotaDate) ORDER BY DATEPART('QUARTER', QuotaDate) RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING ) AS DifferenceFromLastQuarter FROM Sales.SalesPersonQuotaHistory WHERE YEAR(QuotaDate) > 2005 AND BusinessEntityID BETWEEN 274 AND 275 ORDER BY BusinessEntityID, SalesYear, Quarter;
----
274	2	2011	28000.0000	0.0000	-63000.0000
274	3	2011	7000.0000	-21000.0000	-84000.0000
274	4	2011	91000.0000	63000.0000	0.0000
274	1	2012	140000.0000	0.0000	33000.0000
274	2	2012	70000.0000	-70000.0000	-37000.0000
274	3	2012	154000.0000	14000.0000	47000.0000
274	4	2012	107000.0000	-33000.0000	0.0000
274	1	2013	58000.0000	0.0000	-26000.0000
274	2	2013	263000.0000	205000.0000	179000.0000
274	3	2013	116000.0000	58000.0000	32000.0000
274	4	2013	84000.0000	26000.0000	0.0000
274	1	2014	187000.0000	0.0000	0.0000
275	2	2011	367000.0000	0.0000	-135000.0000
275	3	2011	556000.0000	189000.0000	54000.0000
275	4	2011	502000.0000	135000.0000	0.0000
275	1	2012	550000.0000	0.0000	-179000.0000
275	2	2012	1429000.0000	879000.0000	700000.0000
275	3	2012	1324000.0000	774000.0000	595000.0000
275	4	2012	729000.0000	179000.0000	0.0000
275	1	2013	1194000.0000	0.0000	345000.0000
275	2	2013	1575000.0000	381000.0000	726000.0000
275	3	2013	1218000.0000	24000.0000	369000.0000
275	4	2013	849000.0000	-345000.0000	0.0000
275	1	2014	869000.0000	0.0000	0.0000

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql?view=sql-server-2017
query IIRR
SELECT BusinessEntityID, YEAR(QuotaDate) AS SalesYear, SalesQuota AS CurrentQuota, LAG(SalesQuota, 1,0) OVER (ORDER BY YEAR(QuotaDate)) AS PreviousQuota FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID = 275 and YEAR(QuotaDate) IN ('2005','2006');
----

query TIRR
 SELECT TerritoryName, BusinessEntityID, SalesYTD, LAG (SalesYTD, 1, 0) OVER (PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS PrevRepSales FROM Sales.vSalesPerson WHERE TerritoryName IN (N'Northwest', N'Canada') ORDER BY TerritoryName, SalesYTD DESC;
----
Canada	282	2604540.7172	0.0
Canada	278	1453719.4653	2604540.7172
Northwest	284	1576562.1966	0.0
Northwest	283	1573012.9383	1576562.1966
Northwest	280	1352577.1325	1573012.9383

statement ok
CREATE TABLE T (a int, b int, c int);

statement ok
INSERT INTO T VALUES (1, 1, -3), (2, 2, 4), (3, 1, NULL), (4, 3, 1), (5, 2, NULL), (6, 1, 5);

query III
SELECT b, c, LAG(2*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a) AS i FROM T;
----
1	-3	2
2	4	-2
1	NULL	8
3	1	-6
2	NULL	NULL
1	5	NULL

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/lead-transact-sql?view=sql-server-2017
query IIRR
SELECT BusinessEntityID, YEAR(QuotaDate) AS SalesYear, SalesQuota AS CurrentQuota, LEAD(SalesQuota, 1,0) OVER (ORDER BY YEAR(QuotaDate)) AS NextQuota FROM Sales.SalesPersonQuotaHistory WHERE BusinessEntityID = 275 and YEAR(QuotaDate) IN ('2005','2006');
----

query TIRR
SELECT TerritoryName, BusinessEntityID, SalesYTD, LEAD (SalesYTD, 1, 0) OVER (PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS NextRepSales FROM Sales.vSalesPerson WHERE TerritoryName IN (N'Northwest', N'Canada') ORDER BY TerritoryName, BusinessEntityID DESC;
----
Canada	282	2604540.717200	1453719.465300
Canada	278	1453719.465300	0.000000
Northwest	284	1576562.196600	1573012.938300
Northwest	283	1573012.938300	1352577.132500
Northwest	280	1352577.132500	0.000000

query IIII
SELECT a, b, c, LEAD(2.0*c, b*(SELECT MIN(b) FROM T), -c/2.0) OVER (ORDER BY a, b, c) AS i FROM T ORDER BY a, b, c;
----
1	1	-3	8.0
2	2	4	2.0
3	1	NULL	2.0
4	3	1	-0.50000000000000000000
5	2	NULL	NULL
6	1	5	-2.5000000000000000

statement ok
DROP TABLE T;

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/percent-rank-transact-sql?view=sql-server-2017
query TTRRR
SELECT Department, LastName, Rate, CUME_DIST () OVER (PARTITION BY Department ORDER BY Rate) AS CumeDist, PERCENT_RANK() OVER (PARTITION BY Department ORDER BY Rate ) AS PctRank FROM HumanResources.vEmployeeDepartmentHistory AS edh INNER JOIN HumanResources.EmployeePayHistory AS e ON e.BusinessEntityID = edh.BusinessEntityID WHERE Department IN (N'Information Services',N'Document Control') ORDER BY Department, Rate DESC, LastName;
----
Document Control	Arifin	17.7885	1	1
Document Control	Kharatishvili	16.8269	0.8	0.5
Document Control	Norred	16.8269	0.8	0.5
Document Control	Berge	10.2500	0.4	0
Document Control	Chai	10.2500	0.4	0
Information Services	Trenary	50.4808	1	1
Information Services	Conroy	39.6635	0.9	0.8888888888888888
Information Services	Ajenstat	38.4615	0.8	0.6666666666666666
Information Services	Wilson	38.4615	0.8	0.6666666666666666
Information Services	Connelly	32.4519	0.6	0.4444444444444444
Information Services	Sharma	32.4519	0.6	0.4444444444444444
Information Services	Bacon	27.4038	0.4	0
Information Services	Berg	27.4038	0.4	0
Information Services	Bueno	27.4038	0.4	0
Information Services	Meyyappan	27.4038	0.4	0

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/dense-rank-transact-sql?view=sql-server-2017
query ITIII
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID, Quantity DESC, p.Name;
----
495	Paint - Blue	3	49	1
494	Paint - Silver	3	49	1
493	Paint - Red	3	41	2
496	Paint - Yellow	3	30	3
492	Paint - Black	3	17	4
495	Paint - Blue	4	35	1
496	Paint - Yellow	4	25	2
493	Paint - Red	4	24	3
492	Paint - Black	4	14	4
494	Paint - Silver	4	12	5

query IRI
SELECT BusinessEntityID, Rate, DENSE_RANK() OVER (ORDER BY Rate DESC) AS RankBySalary FROM HumanResources.EmployeePayHistory order by Rate DESC, BusinessEntityID DESC LIMIT 10;
----
1	125.5000	1
25	84.1346	2
273	72.1154	3
2	63.4615	4
234	60.0962	5
263	50.4808	6
7	50.4808	6
234	48.5577	7
287	48.1010	8
285	48.1010	8

query TTIIIIRT
SELECT p.FirstName, p.LastName, ROW_NUMBER() OVER (ORDER BY a.PostalCode, p.FirstName) AS "Row Number" ,RANK() OVER (ORDER BY a.PostalCode) AS Rank ,DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank" ,NTILE(4) OVER (ORDER BY a.PostalCode, p.FirstName) AS Quartile ,s.SalesYTD ,a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY a.PostalCode, p.FirstName;
----
Garrett	Vargas	1	1	1	1	1453719.4653	98027
Jillian	Carson	2	1	1	1	3189418.3662	98027
Linda	Mitchell	3	1	1	1	4251368.5497	98027
Michael	Blythe	4	1	1	1	3763178.1787	98027
Pamela	Ansman-Wolfe	5	1	1	2	1352577.1325	98027
Tsvi	Reiter	6	1	1	2	2315185.6110	98027
David	Campbell	7	7	2	2	1573012.9383	98055
Jae	Pak	8	7	2	2	4116871.2277	98055
José	Saraiva	9	7	2	3	2604540.7172	98055
Lynn	Tsoflias	10	7	2	3	1421810.9242	98055
Rachel	Valdez	11	7	2	3	1827066.7118	98055
Ranjit	Varkey Chudukatil	12	7	2	4	3121616.3202	98055
Shu	Ito	13	7	2	4	2458535.6169	98055
Tete	Mensa-Annan	14	7	2	4	1576562.1966	98055

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/ntile-transact-sql?view=sql-server-2017
query TTIRT
SELECT p.FirstName, p.LastName ,NTILE(4) OVER(ORDER BY SalesYTD DESC, p.FirstName) AS Quartile ,s.SalesYTD AS SalesYTD , a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY SalesYTD, p.FirstName;
----
Pamela	Ansman-Wolfe	4	1352577.1325	98027
Lynn	Tsoflias	4	1421810.9242	98055
Garrett	Vargas	4	1453719.4653	98027
David	Campbell	3	1573012.9383	98055
Tete	Mensa-Annan	3	1576562.1966	98055
Rachel	Valdez	3	1827066.7118	98055
Tsvi	Reiter	2	2315185.6110	98027
Shu	Ito	2	2458535.6169	98055
José	Saraiva	2	2604540.7172	98055
Ranjit	Varkey Chudukatil	2	3121616.3202	98055
Jillian	Carson	1	3189418.3662	98027
Michael	Blythe	1	3763178.1787	98027
Jae	Pak	1	4116871.2277	98055
Linda	Mitchell	1	4251368.5497	98027

# FIXME: ntile bug?
query TTIRT
SELECT p.FirstName, p.LastName ,NTILE(4) OVER(PARTITION BY PostalCode ORDER BY SalesYTD DESC, p.FirstName) AS Quartile ,s.SalesYTD AS SalesYTD ,a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ORDER BY PostalCode, SalesYTD DESC, p.FirstName;
----
Linda	Mitchell	1	4251368.5497	98027
Michael	Blythe	1	3763178.1787	98027
Jillian	Carson	2	3189418.3662	98027
Tsvi	Reiter	2	2315185.6110	98027
Garrett	Vargas	3	1453719.4653	98027
Pamela	Ansman-Wolfe	4	1352577.1325	98027
Jae	Pak	1	4116871.2277	98055
Ranjit	Varkey Chudukatil	1	3121616.3202	98055
José	Saraiva	2	2604540.7172	98055
Shu	Ito	2	2458535.6169	98055
Rachel	Valdez	3	1827066.7118	98055
Tete	Mensa-Annan	3	1576562.1966	98055
David	Campbell	4	1573012.9383	98055
Lynn	Tsoflias	4	1421810.9242	98055

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/rank-transact-sql?view=sql-server-2017
query ITIII
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity ,RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS Rank FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID, i.Quantity DESC, i.ProductID;
----
494	Paint - Silver	3	49	1
495	Paint - Blue	3	49	1
493	Paint - Red	3	41	3
496	Paint - Yellow	3	30	4
492	Paint - Black	3	17	5
495	Paint - Blue	4	35	1
496	Paint - Yellow	4	25	2
493	Paint - Red	4	24	3
492	Paint - Black	4	14	4
494	Paint - Silver	4	12	5

query IRI
SELECT BusinessEntityID, Rate, RANK() OVER (ORDER BY Rate DESC) AS RankBySalary FROM HumanResources.EmployeePayHistory AS eph1 WHERE RateChangeDate = (SELECT MAX(RateChangeDate) FROM HumanResources.EmployeePayHistory AS eph2 WHERE eph1.BusinessEntityID = eph2.BusinessEntityID) ORDER BY BusinessEntityID LIMIT 10;
----
1	125.5000	1
2	63.4615	4
3	43.2692	11
4	29.8462	28
5	32.6923	22
6	32.6923	22
7	50.4808	6
8	40.8654	14
9	40.8654	14
10	42.4808	13

# FROM https:docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017
query ITTR
SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS Row, FirstName, LastName, SalesYTD FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY 1;
----
1	Linda	Mitchell	4251368.5497
2	Jae	Pak	4116871.2277
3	Michael	Blythe	3763178.1787
4	Jillian	Carson	3189418.3662
5	Ranjit	Varkey Chudukatil	3121616.3202
6	José	Saraiva	2604540.7172
7	Shu	Ito	2458535.6169
8	Tsvi	Reiter	2315185.6110
9	Rachel	Valdez	1827066.7118
10	Tete	Mensa-Annan	1576562.1966
11	David	Campbell	1573012.9383
12	Garrett	Vargas	1453719.4653
13	Lynn	Tsoflias	1421810.9242
14	Pamela	Ansman-Wolfe	1352577.1325

query TTTRI
SELECT FirstName, LastName, TerritoryName,  SalesYTD, ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY TerritoryName, SalesYTD DESC;
----
Lynn	Tsoflias	Australia	1421810.9242	1
José	Saraiva	Canada	2604540.7172	1
Garrett	Vargas	Canada	1453719.4653	2
Jillian	Carson	Central	3189418.3662	1
Ranjit	Varkey Chudukatil	France	3121616.3202	1
Rachel	Valdez	Germany	1827066.7118	1
Michael	Blythe	Northeast	3763178.1787	1
Tete	Mensa-Annan	Northwest	1576562.1966	1
David	Campbell	Northwest	1573012.9383	2
Pamela	Ansman-Wolfe	Northwest	1352577.1325	3
Tsvi	Reiter	Southeast	2315185.6110	1
Linda	Mitchell	Southwest	4251368.5497	1
Shu	Ito	Southwest	2458535.6169	2
Jae	Pak	United Kingdom	4116871.2277	1