У меня есть сложная проблема. Идея заключается в том, мне нужно отчетливое Serv_Acct из таблицы (Это очень просто и у меня уже есть, что):SQL Server DISTINCT ИЛИ GROUP BY TEMP TABLES
DECLARE
@CustomerID int = 8,
@UtilityCompanyID int = 1
SELECT DISTINCT SERV_ACCT, MAX(INV_DATE)
FROM tblAPSData
WHERE SERV_ACCT NOT IN (SELECT ServiceAccount
FROM tblMEP_Meters
JOIN tblMEP_Sites
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID
JOIN tblMEP_Projects
ON tblMEP_Projects.ID = tblMEP_Sites.ProjectID
WHERE CustomerID = 8
AND Type = 1
)
AND ACCOUNT IN (SELECT AccountNumber
FROM tblMEP_CustomerAccounts
WHERE CustomerID = @CustomerID
AND UtilityCompanyID = @UtilityCompanyID)
AND INV_DATE > DATEADD(month, -6, getdate())
GROUP BY SERV_ACCT
Когда я запускаю это я получаю 16 строк:
SERV_ACCT (No column name)
0289S61288 2013-06-12 00:00:00.000
0492S90281 2013-06-12 00:00:00.000
1303S90280 2013-06-12 00:00:00.000
1435S01282 2013-06-12 00:00:00.000
1440S13289 2013-06-24 00:00:00.000
1548S00286 2013-06-12 00:00:00.000
2498S21288 2013-06-12 00:00:00.000
5384S92284 2013-06-24 00:00:00.000
5538S21284 2013-06-12 00:00:00.000
6109S12286 2013-06-12 00:00:00.000
7358S00281 2013-06-12 00:00:00.000
7488S22289 2013-06-12 00:00:00.000
8058S12287 2013-06-12 00:00:00.000
9058S00288 2013-06-12 00:00:00.000
9168S00282 2013-06-12 00:00:00.000
9645S21281 2013-06-12 00:00:00.000
Теперь часть Я не получаю это, с каждой учетной записью службы есть номер учетной записи, а некоторые учетные записи службы имеют более одного номера учетной записи, я хочу, чтобы у меня была только одна учетная запись с последней датой. Смотрите проблемы, когда я пытаюсь сделать это так:
DECLARE
@CustomerID int = 8,
@UtilityCompanyID int = 1
SELECT DISTINCT SERV_ACCT, ACCOUNT, MAX(INV_DATE)
FROM tblAPSData
WHERE SERV_ACCT NOT IN (SELECT ServiceAccount
FROM tblMEP_Meters
JOIN tblMEP_Sites
ON tblMEP_Meters.SiteID = tblMEP_Sites.ID
JOIN tblMEP_Projects
ON tblMEP_Projects.ID = tblMEP_Sites.ProjectID
WHERE CustomerID = 8
AND Type = 1
)
AND ACCOUNT IN (SELECT AccountNumber
FROM tblMEP_CustomerAccounts
WHERE CustomerID = @CustomerID
AND UtilityCompanyID = @UtilityCompanyID)
AND INV_DATE > DATEADD(month, -6, getdate())
GROUP BY SERV_ACCT, ACCOUNT
ORDER BY SERV_ACCT
Теперь результат заключается в следующем:
SERV_ACCT ACCOUNT (No column name)
0289S61288 117512280 2013-06-12 00:00:00.000
0492S90281 117512280 2013-06-12 00:00:00.000
0492S90281 651412281 2013-04-08 00:00:00.000
1303S90280 117512280 2013-06-12 00:00:00.000
1435S01282 117512280 2013-06-12 00:00:00.000
1440S13289 312937281 2013-06-24 00:00:00.000
1548S00286 117512280 2013-06-12 00:00:00.000
1548S00286 308710287 2013-04-08 00:00:00.000
2498S21288 117512280 2013-06-12 00:00:00.000
5384S92284 979437282 2013-06-24 00:00:00.000
5538S21284 117512280 2013-06-12 00:00:00.000
6109S12286 117512280 2013-06-12 00:00:00.000
7358S00281 117512280 2013-06-12 00:00:00.000
7358S00281 659710281 2013-04-08 00:00:00.000
7488S22289 117512280 2013-06-12 00:00:00.000
8058S12287 117512280 2013-06-12 00:00:00.000
9058S00288 117512280 2013-06-12 00:00:00.000
9168S00282 117512280 2013-06-12 00:00:00.000
9168S00282 570810282 2013-04-08 00:00:00.000
9645S21281 117512280 2013-06-12 00:00:00.000
Как вы видите, Serv_Acct не Distinct больше! Моя цель - получить только отдельный Serv_Acct (который равен 16) с последней учетной записью. Любая помощь в том, как это сделать? Я спросил друга, и она сказала мне, что я могу сделать это с помощью временных таблиц! Это правда?
Thank you Mike !! Это то, что я точно ищу, не могли бы вы показать мне, как вы можете это сделать с помощью временных таблиц? Еще раз спасибо. –