2014-12-09 2 views
0

Я работаю над системой, которая в настоящее время предназначена для управления активами внутри нашей компании.inested select TOP 1 statement

Система позволяет пользователям вводить/удалять элементы на постоянной или временной основе.

Я работаю над некоторыми отчетами о системе и ударил камень преткновения, возвратив соответствующие данные.

Так что я знаю, что мне нужен вложенный запрос Select TOP 1 в мой основной запрос, но я не могу заставить его работать.

Основной запрос выглядит следующим образом:

SELECT [Asset-User].ID, [Asset-User].Asset_ID, [Assets].ID, [Assets].Signed_Out, [Assets].Asset_Tag_Serial_Num, [Assets].Name_Hostname, [Assets].Type_ID, [Asset_Type].ID, [Asset_Type].Name_Model, [Asset-User].User_ID, [Company_Users].ID, [Asset-User].Sign_Out_Date, [Asset-User].Return_Date, [Asset-User].[Perm_Signout?] 
FROM [Asset-User], [Assets], [Asset_Type], [Company_Users] 
WHERE ([User_ID] = '1') AND [Asset-User].Asset_ID = [Assets].ID AND [Assets].Type_ID = [Asset_Type].ID AND [Asset-User].User_ID = [Company_Users].ID AND [Assets].Signed_Out = '1' 

Так этот запрос возвращает все, что в настоящее время помечены как «Подпись Out», который когда-либо был подписан из Пользователем 1.

Где-то здесь я необходимо добавить вложенную команду Select TOP 1 на Asset-User.ID, чтобы она возвращала только те элементы, которые помечены как постоянные выходы, или если они не являются постоянными, что они были недавно выписаны пользователем 1.

Это будет то дайте мне список предметов в настоящее время как подписал контракт с пользователем и не отображать актив, если кто-то подписал его, так как

Любая помощь будет высоко оценен

По данным Образец запроса ниже: https://docs.google.com/spreadsheets/d/1o4T6bsxyO-1dGE0-FUtWFboRupcq4o4V9i2Em0_BjyU/edit?usp=sharing

Первый лист показывает фактические результаты, второй лист показывает примерно то, что следует ожидать

Как вы увидите здесь, этот пользователь несколько раз выписал несколько элементов (и эти элементы могут быть не последними были отключены этим пользователем)

Сложно получить данные образца, но по существу не должно быть дубликатов Asset_ID в списке, поскольку для каждого Asset_ID должен отображаться только самый последний ID (идентификатор выхода, который относится к нему).

Помогло ли это?

Еще раз спасибо

По запросу здесь есть схема сборки код, который создаст образец DB для работы с

CREATE TABLE Asset_Type 
    ([ID] int, [Global_ID] int, [Name_Model] varchar(30), [Description_Spec] varchar(54)) 
; 

INSERT INTO Asset_Type 
    ([ID], [Global_ID], [Name_Model], [Description_Spec]) 
VALUES 
    (1, 1, 'Dell Optiplex 3020', 'Windows 7 Professional, Intel Core i3 3.40GHz,4Gb RAM'), 
    (2, 3, 'Viewsonic VA2231wa', 'Viewsonic Widescreen Monitor'), 
    (3, 3, 'Samsung S24B150BL', 'Samsung LED 24" Widescreen Monitor') 
; 

CREATE TABLE Assets 
    ([ID] int, [Asset_Tag_Serial_Num] varchar(29), [Type_ID] int, [Purchase_Date] varchar(10), [Purchase_Price] varchar(7), [Name_Hostname] varchar(36), [Signed_Out] int) 
; 

INSERT INTO Assets 
    ([ID], [Asset_Tag_Serial_Num], [Type_ID], [Purchase_Date], [Purchase_Price], [Name_Hostname], [Signed_Out]) 
VALUES 
    (1, '0206', 1, '2013-11-29', '323.30', 'WS0206', 1), 
    (3, '0226', 2, NULL, NULL, 'Viewsonic VA2231wa - 0226', 1), 
    (4, '0204', 1, '2013-11-29', '323.00', 'WS0204', 1), 
    (5, '0205', 1, '2013-11-29', '323.00', 'WS0205', 1), 
    (6, '0108', 1003, NULL, NULL, 'Small Office Sat Nav', 1), 
    (7, '0092', 1004, NULL, NULL, 'Large Office Sat Nav', 1), 
    (8, 'GWC36-DHDBC-J2MXY-H2BGY-8C79G', 1005, '1900-01-01', '0.00', 'MS Office for WS0020', 1), 
    (9, '0020', 1006, '1900-01-01', '0.00', 'WS0020', 1), 
    (10, '0173', 2, '1900-01-01', '0.00', 'Viewsonic VA2231wa - 0173', 1), 
    (11, '0172', 1007, '1900-01-01', '0.00', 'Dell 19" Monitor 0172', 1), 
    (12, '00104926EC6B', 1008, '1900-01-01', '0.00', 'Shortel 230 - EC6B', 1), 
    (13, '0227', 1009, NULL, NULL, 'Blue - Yeti Mic', 0), 
    (14, '0221', 1, NULL, NULL, 'WS0221', 1), 
    (15, '0222', 1, '2013-11-29', '323.00', 'WS0222', 1), 
    (16, '0223', 1, NULL, NULL, 'WS0223', 1), 
    (17, '0220', 1, '2013-11-29', '323.00', 'WS0220', 1), 
    (18, '0217', 1, '2013-11-29', '323.00', 'WS0217', 1), 
    (19, '0218', 1, NULL, NULL, 'WS0218', 1), 
    (20, '0219', 1, '2013-11-29', '323.00', 'WS0219', 1), 
    (21, '0228', 2, NULL, NULL, 'Viewsonic VA2231wa - 0228', 1), 
    (22, '0229', 1010, NULL, NULL, 'Dell 19" Monitor 0229', 1), 
    (23, '00104931AA16', 1011, NULL, NULL, 'Shortel 115 - AA16', 1), 
    (24, '0093 - DYTJ18X4DJ8T', 1012, NULL, NULL, 'Office IPad 3', 1), 
    (25, '0095', 1013, '1900-01-01', '0.00', '320Gb External HDD', 1), 
    (26, '0071', 1014, NULL, NULL, '0071 - NEC Projector', 0), 
    (27, '0072', 1015, NULL, NULL, '0072 - Black Dell Projector', 0), 
    (28, '0073', 1016, '1900-01-01', '0.00', '0073 - Dell Projector', 0), 
    (29, '0230', 1017, '1900-01-01', '0.00', '0230 - Silver Dell Projector', 0), 
    (30, '0064', 1018, NULL, NULL, 'WS0064', 0), 
    (31, '0231', 1019, NULL, NULL, 'Freecom 1GB Pen - 0231', 1), 
    (47, '0165', 2, NULL, NULL, 'Viewsonic VA2231wa - 0165', 1), 
    (48, '0232', 1010, '1900-01-01', '0.00', 'Dell 19" Monitor 0232', 1), 
    (49, '0233', 1010, '1900-01-01', '0.00', 'Dell 19" Monitor 0233', 1), 
    (50, '0137', 1022, NULL, NULL, 'Viewsonic VA2248-LED - 0137', 1), 
    (51, '0234', 1010, '1900-01-01', '0.00', 'Dell 19" Monitor 0234', 1), 
    (52, '0235', 1010, '1900-01-01', '0.00', 'Dell 19" Monitor 0235', 1), 
    (53, '0134', 1010, NULL, NULL, 'Dell 19" Monitor 0134', 0), 
    (54, '0135', 1022, NULL, NULL, 'Viewsonic VA2248-LED - 0135', 1), 
    (55, '0236', 3, '1900-01-01', '0.00', 'Samsung S24B150BL - 0236', 1), 
    (56, '001049201D9A', 1008, '1900-01-01', '0.00', 'Shortel 230 - 1D9A', 1), 
    (57, '0010492015AE', 1008, '1900-01-01', '0.00', 'Shortel 230 - 15AE', 1), 
    (93, '0269', 1029, '1900-01-01', '0.00', 'TP-Link Switch - 0269', 0), 
    (94, '0058', 1030, NULL, NULL, 'WS0058', 1), 
    (95, '0270', 1031, NULL, NULL, 'MeetingRoom3', 1), 
    (96, '0243', 1032, NULL, NULL, 'MeetingRoom2', 1), 
    (97, '0271', 1027, NULL, NULL, 'Dynamode SW80010-D Switch - 0271', 0), 
    (123, '0281', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0281', 0), 
    (124, '0282', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0282', 1), 
    (125, '0283', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0283', 0), 
    (126, '0284', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0284', 1), 
    (127, '0285', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0285', 1), 
    (128, '0286', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0286', 1), 
    (129, '0287', 1045, '2014-07-18', '104.50', 'Philips 23.6" Monitor 0287', 1), 
    (143, '0280', 1, '2014-07-03', '403.80', 'WS0280', 1), 
    (144, '0296', 1, '2014-07-03', '403.80', 'WS0296', 1), 
    (145, '0297', 1, '2014-07-03', '403.80', 'WS0297', 1), 
    (146, '0298', 1, '2014-07-03', '403.80', 'WS0298', 1), 
    (147, '0299', 1, '2014-07-03', '403.80', 'WS0299', 1), 
    (148, '0052', 1036, '1900-01-01', '0.00', 'WS0052', 1), 
    (168, '0312', 1047, NULL, NULL, 'Epson White HD - 0312', 1), 
    (169, '0201', 1049, '1900-01-01', '0.00', 'Ipad 4 - 0201', 0), 
    (170, 'HP27J-2C496-83KXB-RGMX6-8QJQG', 1020, '1900-01-01', '0.00', 'MS Office for Jonny D', 1), 
    (171, '7N4QY-DFGWD-P6662-CFCHG-QYFP2', 1021, '1900-01-01', '0.00', 'MS Office for WS0215 (Simeon Laptop)', 1), 
    (172, '0140', 1022, '1900-01-01', '0.00', 'Viewsonic VA2248-LED - 0140', 1), 
    (198, '0109', 1037, '1900-01-01', '0.00', 'WS0109', 1), 
    (199, '0324', 1052, '1900-01-01', '0.00', 'Philips 23.6" Monitor 0324', 1) 
; 

CREATE TABLE [Asset-User] 
    ([ID] int, [Asset_ID] int, [User_ID] int, [Sign_Out_Date] datetime, [Return_Date] datetime, [Perm_Signout] int) 
; 

INSERT INTO [Asset-User] 
    ([ID], [Asset_ID], [User_ID], [Sign_Out_Date], [Return_Date], [Perm_Signout]) 
VALUES 
    (2, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (3, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (4, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (5, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (6, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (7, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (8, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (9, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (10, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (11, 1, 1, '2014-03-29 00:00:00', '2014-03-29 00:00:00', 0), 
    (1002, 1, 1, '2014-04-01 00:00:00', '2014-04-01 00:00:00', 0), 
    (1003, 1, 1, '2014-01-01 00:00:00', '2014-01-01 00:00:00', 1) 

; 

CREATE TABLE Company_Users 
    ([ID] int, [Name] varchar(14), [Domain_Username] varchar(14), [Dept] varchar(16), [Email] varchar(25), [DD_Ext] int, [Job_Title] varchar(30), [Deleted_Left] int) 
; 

INSERT INTO Company_Users 
    ([ID], [Name], [Domain_Username], [Dept], [Email], [DD_Ext], [Job_Title], [Deleted_Left]) 
VALUES 
    (1, 'Neil Smithson', 'Neil.Smithson', '2nd Line Support', '[email protected]', 3041, 'Second Line Support Technician', 0) 

; 

CREATE TABLE Global_Types 
    ([ID] int, [Name] varchar(13), [Description] varchar(54)) 
; 

INSERT INTO Global_Types 
    ([ID], [Name], [Description]) 
VALUES 
    (1, 'PC', 'Desktop PC') 


; 
+0

Можете ли вы предоставить образцы данных и желаемые результаты? Я (для одного) не могу понять, что вы на самом деле пытаетесь выполнить. –

+0

См. Править выше со ссылкой на таблицу данных образца из БД, спасибо за вашу помощь. – user2336498

+0

Большинство людей (включая меня) не собираются загружать электронную таблицу у кого-то, кого они не знают. Вместо этого попробуйте sqlfiddle.com. Кроме того, вам действительно нужно использовать объединения типа ANSI-92, они существуют уже более 30 лет. Кроме того, псевдонимы сделают это намного проще для чтения. –

ответ

0

Это не совсем ответ, но покажет вам, как вы могли бы переработать этот запрос с использованием псевдонимов и (не совсем) новый стиль соединения.

SELECT au.ID 
    , au.Asset_ID 
    , a.ID 
    , a.Signed_Out 
    , a.Asset_Tag_Serial_Num 
    , a.Name_Hostname 
    , a.Type_ID 
    , at.ID 
    , at.Name_Model 
    , au.User_ID 
    , cu.ID 
    , au.Sign_Out_Date 
    , au.Return_Date 
    , au.[Perm_Signout?] 
FROM [Asset-User] au 
join Assets a on au.Asset_ID = a.ID 
join Asset_Type at on a.Type_ID = at.ID 
join Company_Users cu on au.User_ID = cu.ID 
WHERE au.User_ID = '1' 
    AND a.Signed_Out = '1'