Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выбрать только 6 последних периодов  [new]
ecivgamer
Member

Откуда:
Сообщений: 692
Привет всем,

пытаюсь выбрать последние 6 периодов. Пробовал TOP(6) с ORDER BY [date] DESC, но "DESC" вроде как игнорируется. Получаю тот же неверный результат (6 первых периодов вместо 6 последних) с "DESC" и без. Подскажите плз что тут можно сделать.

SELECT     TOP (6) CONVERT(varchar, StatementID) AS statementid, contractid, accountingDate2
FROM         (SELECT     TOP (100) PERCENT StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6) AS accountingDate2, COUNT(1) AS cnt
                       FROM          vpvbkiR_Record AS t
                       WHERE      (CONVERT(varchar, StatementID) = '135b8c93-0801-44e3-9dc8-319608') AND (contractid = 1)
                       GROUP BY StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6)
                       ORDER BY accountingDate2 DESC) AS k
10 авг 12, 19:03    [12996007]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
SELECT  CONVERT(varchar, StatementID) AS statementid, contractid, accountingDate2
FROM         (SELECT     TOP (6) PERCENT StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6) AS accountingDate2, COUNT(1) AS cnt
                       FROM          vpvbkiR_Record AS t
                       WHERE      (CONVERT(varchar, StatementID) = '135b8c93-0801-44e3-9dc8-319608') AND (contractid = 1)
                       GROUP BY StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6)
                       ORDER BY accountingDate2 DESC) AS k
10 авг 12, 19:13    [12996057]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ecivgamer,

TOP(100) PERCENT - это что???
Что, по-Вашему должен выбрать сервер, если не все записи?
Из которых выбираете случайные 6...

Между прочим, SQL Server 2005 или более новый игнорирует TOP(100) PERCENT. Совсем.
10 авг 12, 19:16    [12996068]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гавриленко Сергей Алексеевич
SELECT  CONVERT(varchar, StatementID) AS statementid, contractid, accountingDate2
FROM         (SELECT     TOP (6) PERCENT StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6) AS accountingDate2, COUNT(1) AS cnt
                       FROM          vpvbkiR_Record AS t
                       WHERE      (CONVERT(varchar, StatementID) = '135b8c93-0801-44e3-9dc8-319608') AND (contractid = 1)
                       GROUP BY StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6)
                       ORDER BY accountingDate2 DESC) AS k
PERCENT надо выбросить
10 авг 12, 19:17    [12996076]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
ecivgamer
Member

Откуда:
Сообщений: 692
Гавриленко Сергей Алексеевич,

так не хотит. Выводит почему-то одну строку вместо шести.


А вот так заработало:

SELECT     TOP (6) CONVERT(varchar, StatementID) AS statementid, contractid, accountingDate2
FROM         (SELECT     TOP (100) PERCENT StatementID, contractid, 
SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6) AS accountingDate2, COUNT(1) AS cnt
FROM          vpvbkiR_Record AS t
WHERE      (CONVERT(varchar, StatementID) = '135b8c93-0801-44e3-9dc8-319608') AND (contractid = 1)
GROUP BY StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6)) AS k
ORDER BY accountingDate2 DESC
10 авг 12, 19:18    [12996080]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
ecivgamer
Member

Откуда:
Сообщений: 692
точнее так:

SELECT     TOP (6) CONVERT(varchar, StatementID) AS statementid, contractid, accountingDate2
FROM         (SELECT     StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6) AS accountingDate2, COUNT(1) AS cnt
FROM          vpvbkiR_Record AS t
WHERE      (CONVERT(varchar, StatementID) = '135b8c93-0801-44e3-9dc8-319608') AND (contractid = 1)
GROUP BY StatementID, contractid, SUBSTRING(CONVERT(varchar, accountingDate, 112), 1, 6)) AS k
ORDER BY accountingDate2 DESC


(с учетом всех замечаний)
10 авг 12, 19:19    [12996089]     Ответить | Цитировать Сообщить модератору
 Re: выбрать только 6 последних периодов  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
ecivgamer
Выводит почему-то одну строку вместо шести.
Наверно 6 процентов - это и есть одна строка от всего результата запроса
10 авг 12, 19:52    [12996256]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить