Требуется справка по запросу SQL TOP 10 Ranking Query

StackOverflow https://stackoverflow.com/questions/2251368

  •  20-09-2019
  •  | 
  •  

Вопрос

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

Я получил это, работая с топ-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 лучших приложений.

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_SERVERNAME, PK_SERVERID dbo_LU_SERVERNAME ---> PK_SERVERNAME dbo.SDB.SESSION ---> ИДЕНТИФИКАТОР FK_SERVERID

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

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

Спасибо

Это было полезно?

Решение

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

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";

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

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

Ваше здоровье :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top