2010-02-12 9 views
2

У меня есть код ниже, и я пытаюсь найти 10 лучших серверов, используемых в прошлом месяце, но имеющих проблемы, не очень хороших с SQL. Нужна помощь или совет, если это возможно.SQL ТОП 10 Оценка запроса Требуется помощь

Я получил эту работу в 10 лучших приложениях, но не могу понять, как это произошло для 10 лучших серверов.

SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNumbers 
FROM dbo_LU_SERVERNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_SERVERNAME.PK_SERVERNAMEID = dbo_SDB_SESSION.FK_SERVERNAMEID 
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-30,Now()))) 
GROUP BY dbo_LU_SERVERNAME.SERVERNAME 
ORDER BY Count(*) DESC; 

UNION ALL SELECT "Other" AS SERVERNAME, Count(*) AS SessionNumbers 
FROM (dbo_LU_SERVERNAME 
INNER JOIN dbo_SDB_SESSION 
ON dbo_LU_SERVER.PK_SERVERID = dbo_SDB_SESSION.FK_SERVERID) 
LEFT JOIN (SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNos 
      FROM dbo_LU_SERVERNAME 
      INNER JOIN dbo_SDB_SESSION 
      ON dbo_LU_SERVER.PK_SERVERID = dbo_SDB_SESSION.FK_SERVERID 
      WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-31,Now()))) 
      GROUP BY dbo_LU_SERVERNAME.SERVERNAME 
      ORDER BY Count(*) DESC) AS s ON dbo_LU_SERVERNAME.SERVERNAME = s.SERVERNAME 

WHERE s.SERVERNAME Is Null 
GROUP BY "Other"; 

Это SQL, который работает для 10 лучших APPS.

SELECT TOP 10 dbo_LU_APPNAME.APPNAME, Count(*) AS SessionNos 
FROM dbo_LU_APPNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID 
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-30,Now()))) 
GROUP BY dbo_LU_APPNAME.APPNAME 
ORDER BY Count(*) DESC; 

UNION ALL SELECT "Other" AS APPNAME, Count(*) AS SessionNos 
FROM (dbo_LU_APPNAME 
INNER JOIN dbo_SDB_SESSION 
ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID) 
LEFT JOIN (SELECT TOP 10 dbo_LU_APPNAME.APPNAME, Count(*) AS SessionNos 
      FROM dbo_LU_APPNAME 
      INNER JOIN dbo_SDB_SESSION 
      ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID 
      WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-31,Now()))) 
      GROUP BY dbo_LU_APPNAME.APPNAME 
      ORDER BY Count(*) DESC) AS s ON dbo_LU_APPNAME.APPNAME = s.APPNAME 

WHERE s.APPNAME Is Null 
GROUP BY "Other"; 

Пожалуйста, обратите внимание, что таблицы связаны как: dbo_LU_SERVER ---> FK_SERVERNAMEID, PK_SERVERID dbo_LU_SERVERNAME ---> PK_SERVERNAMEID dbo.SDB.SESSION ---> FK_SERVERID

Я не уверен, что я делаю неправильно.

Пожалуйста, помогите.

Спасибо

+0

То, что вы не объясните в вашем вопросе является использование UNION ALL. Я разбираюсь в том, что это общее количество всех сеансов сервера, не включенных в список из 10 лучших. Поэтому ваш окончательный список будет состоять из 11 строк, 10 лучших серверов, а затем подсчет всех остальных сеансов. – Tony

+0

Вы отметили свой вопрос с помощью SQL и ms-access и visual-basic. Я предполагаю, что вы пишете этот запрос для Access, но где входит часть VB? – Tony

+0

Это из http://stackoverflow.com/questions/2205902/need-help-with-sql-query-in-access/2206029#2206029 не так ли? – Fionnuala

ответ

1

Мне удалось ответить на мой вопрос.

SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNumbers 
FROM dbo_LU_SERVERNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_SERVERNAME.PK_SERVERNAMEID = dbo_SDB_SESSION.FK_SERVERID 
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-30,Now()))) 
GROUP BY dbo_LU_SERVERNAME.SERVERNAME 
ORDER BY Count(*) DESC; 

UNION ALL SELECT "Other" AS SERVERNAME, Count(*) AS SessionNumbers 
FROM (dbo_LU_SERVERNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_SERVERNAME.PK_SERVERNAMEID = dbo_SDB_SESSION.FK_SERVERID) 
LEFT JOIN (SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNos 
      FROM dbo_LU_SERVERNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_SERVERNAME.PK_SERVERNAMEID = dbo_SDB_SESSION.FK_SERVERID 
      WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-31,Now()))) 
      GROUP BY dbo_LU_SERVERNAME.SERVERNAME 
      ORDER BY Count(*) DESC) AS a ON dbo_LU_SERVERNAME.SERVERNAME = a.SERVERNAME 

WHERE a.SERVERNAME Is Null 
GROUP BY "Other"; 

Спасибо за ваши комментарии, я задать еще один вопрос некоторое время, прежде чем почти так же, как это, но другой один относительно двух связанных сущностей, это три связанных с ней структур.

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

Приветствия :)

Смежные вопросы