Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Последняя и предпоследняя записи в таблице / 25 сообщений из 35, страница 1 из 2
16.06.2010, 14:46
    #36690133
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Подскажите пожалуйста как вывести последнюю и предпоследнюю запись в таблице? можно по дате, но лучше по id наверно, вообщем любые варианты а я попробую что лучше подойдет.
Заранее благодарен!!!
...
Рейтинг: 0 / 0
16.06.2010, 14:52
    #36690157
iljy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985,

top 2 .... order by .... desc
...
Рейтинг: 0 / 0
16.06.2010, 14:52
    #36690158
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985,
Код: plaintext
1.
2.
select top2 *
from mytable
order by id desc
...
Рейтинг: 0 / 0
17.06.2010, 10:45
    #36691726
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Это по последней записи, а с предпоследней как быть?
...
Рейтинг: 0 / 0
17.06.2010, 10:49
    #36691737
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985Это по последней записи, а с предпоследней как быть?Из двух возвращаемых записей одна - последняя, а вторая - предпоследняя.
Разве не так?
...
Рейтинг: 0 / 0
17.06.2010, 10:49
    #36691738
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985Это по последней записи, а с предпоследней как быть?ТОР 2 (два)

Дима
Василий
Анна
...
Рейтинг: 0 / 0
17.06.2010, 11:19
    #36691804
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Все проблема решена))) Спасибо всем большое)))
...
Рейтинг: 0 / 0
17.06.2010, 11:25
    #36691822
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
А можете еще подсказать, как вывести последнюю и предпоследнюю запись отдельно? сейча выводит 2 записи последнюю и предпоследнюю вместе, а отдельно как вывести?(ну с последней понятно более менее вроде выводится, а предпоследнюю как вывести отдельно)
...
Рейтинг: 0 / 0
17.06.2010, 11:33
    #36691842
SomewhereSomehow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
самый очевидный способ..
Код: plaintext
1.
2.
3.
4.
select top1 * from mytable
where
id > (select min(id) from mytable)
order by id desc
...
Рейтинг: 0 / 0
17.06.2010, 11:38
    #36691857
Taffy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985,

вот скрипт (из недр форума, автора не помню к сожалению)
Постраничная выборка
В принципе, если его разберете, найдете ответ на свой вопрос :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
CREATE PROCEDURE GetSortedPage(
  @TableName VARCHAR( 50 ),
  @PrimaryKey VARCHAR( 25 ),
  @SortField VARCHAR( 100 ),
  @PageSize INT,
  @PageIndex INT =  1 ,
  @QueryFilter VARCHAR( 100 ) = NULL
) AS
SET NOCOUNT ON

DECLARE @SizeString AS VARCHAR( 5 )
DECLARE @PrevString AS VARCHAR( 5 )

SET @SizeString = CONVERT(VARCHAR, @PageSize)
SET @PrevString = CONVERT(VARCHAR, @PageSize * (@PageIndex -  1 ))

IF @QueryFilter IS NULL OR @QueryFilter = ''
BEGIN

  EXEC(
  'SELECT * FROM ' + @TableName + ' WHERE ' + @PrimaryKey + ' IN
    (SELECT TOP ' + @SizeString + ' ' + @PrimaryKey + ' FROM ' + @TableName + ' WHERE ' + @PrimaryKey + ' NOT IN
      (SELECT TOP ' + @PrevString + ' ' + @PrimaryKey + ' FROM ' + @TableName + ' ORDER BY ' + @SortField + ')
    ORDER BY ' + @SortField + ')
  ORDER BY ' + @SortField
  )
  EXEC('SELECT (COUNT(*) - 1)/' + @SizeString + ' + 1 AS PageCount FROM ' + @TableName)

END
ELSE
BEGIN

  EXEC(
  'SELECT * FROM ' + @TableName + ' WHERE ' + @PrimaryKey + ' IN
    (SELECT TOP ' + @SizeString + ' ' + @PrimaryKey + ' FROM ' + @TableName + ' WHERE ' + @QueryFilter + ' AND ' + @PrimaryKey + ' NOT IN
      (SELECT TOP ' + @PrevString + ' ' + @PrimaryKey + ' FROM ' + @TableName + ' WHERE ' + @QueryFilter + ' ORDER BY ' + @SortField + ')
    ORDER BY ' + @SortField + ')
  ORDER BY ' + @SortField
  )
  EXEC('SELECT (COUNT(*) - 1)/' + @SizeString + ' + 1 AS PageCount FROM ' + @TableName + ' WHERE ' + @QueryFilter)

END

RETURN  0 
GO
...
Рейтинг: 0 / 0
17.06.2010, 11:43
    #36691881
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Код: plaintext
1.
2.
3.
4.
5.
6.
select top  1  * from
(
 select top  2  *
 from mytable
 order by id desc
) t
order by id;
...
Рейтинг: 0 / 0
17.06.2010, 11:53
    #36691906
Последняя и предпоследняя записи в таблице
alexay_1985А можете еще подсказать, как вывести последнюю и предпоследнюю запись отдельно? сейча выводит 2 записи последнюю и предпоследнюю вместе, а отдельно как вывести?(ну с последней понятно более менее вроде выводится, а предпоследнюю как вывести отдельно)
Вложенный TOP. :):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with
  t (num, name) as
    (
      select  1 , 'Анна' union all
      select  2 , 'Василий' union all
      select  3 , 'Дима'
    )
select top  1  * 
  from (
         select top  2  t.*
           from t
          order by name desc
       ) v
 order by name;


num    name
---   -------
   2    Василий

( 1  row(s) affected)
...
Рейтинг: 0 / 0
17.06.2010, 11:56
    #36691913
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
alexay_1985А можете еще подсказать, как вывести последнюю и предпоследнюю запись отдельно? сейча выводит 2 записи последнюю и предпоследнюю вместе, а отдельно как вывести?(ну с последней понятно более менее вроде выводится, а предпоследнюю как вывести отдельно)
На клиенте сначала прочитать 1ю запись полученного результата, а потом вторую
И отобразить полученные значения отдельно
...
Рейтинг: 0 / 0
17.06.2010, 13:27
    #36692171
alexay_1985
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Спасибо всем, очень помогли!!!
...
Рейтинг: 0 / 0
22.07.2010, 07:22
    #36753612
r-dreamer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
У меня похожая задача только надо не просто вывести две последние по дате или id записи, а сравнить их по полю сумма, т.е. делаем селект каунт с группировкой по внешнему id, а внутри группы сравнить две последних записи по сумме если она отличается то группу считаем в каунте, если она одинакова то не считаем
...
Рейтинг: 0 / 0
22.07.2010, 13:31
    #36754368
Последняя и предпоследняя записи в таблице
...
Рейтинг: 0 / 0
23.07.2010, 11:34
    #36756113
Гость 123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
declare @t table (idx int, [name] varchar(max))

insert @t
      select  22 , 'Анна' union all
      select  45 , 'Василий' union all
      select  14 , 'Дима' union all
      select  50 , 'Александр' union all
      select  31 , 'Борис'

select * from @t

-- Найти просто с предпоследним idx. (Estimated Subtree Cost = 0,0098605)
select * from @t where idx = (select max(idx) from @t where idx < (select max(idx) from @t))

-- Вывести предпоследнюю и последнюю записи (Estimated Subtree Cost = 0,006572)
select * from @t where idx in ( (select max(idx) from @t where idx < (select max(idx) from @t)), (select max(idx) from @t) )


/* Тоже самое, но через сортировку */
-- (Estimated Subtree Cost = 0,0179371)
select top  1  * from @t where idx < (select max(idx) from @t) order by idx desc

-- (Estimated Subtree Cost = 0,0260138)
select top  2  * 
  from (
         select top  2  t.*
           from @t t
          order by idx desc
       ) v
 order by idx
...
Рейтинг: 0 / 0
06.10.2010, 10:02
    #36884007
lod2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
К теме, хотел бы поделится задачей, которая привела на эту страницу.
В таблице есть id - инкремент, state - статус ("0" - выполнен, "1" - активен).
Задача: отображать все активные, а также последние выполненые с условием, что общее число строк не больше 100.

Решение:
Код: plaintext
1.
select * from Table1 where id in (select top (select ( 100 -count(*)) from Table1  where state= 1 )  id 
from Table1   where state= 0  order by id desc) or state= 1   order by id

Если условие "выполненых 100 + все активные", то можно ускорить запрос:
Код: plaintext
1.
2.
select * from Table1 
  where id in (select top ( 100 )  id from Table1  where state= 0  order by id desc)
    or state= 1   order by id

Здесь, в конструкции
Код: plaintext
in (...)
выбираем id последних 100 "выполненых" записей, но id отсортирован поубыванию, поэтому в конце принудительно сортируем как надо :-)
...
Рейтинг: 0 / 0
06.10.2010, 10:21
    #36884051
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
lod2007В таблице есть id - инкремент, state - статус ("0" - выполнен, "1" - активен).
Задача: отображать все активные, а также последние выполненые с условием, что общее число строк не больше 100.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select *
from (
select *, ROW_NUMBER() over (order by state desc, id desc) as num
	from (
		select * 
		from Table1
		where state =  1 
		union all
		select *
		from (
			select top  100  *
			from Table1
			where state =  0 
			order by id desc
		) as t
	) as t
) as t
where state =  1  or num <=  100 
...
Рейтинг: 0 / 0
06.10.2010, 10:30
    #36884083
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @cnt int

select @cnt=CASE WHEN count(*)< 100  then  100  ELSE count(*) END FROM aTable WHERE state=cast(  1  as bit)

set ROWCOUNT @cnt

select * FROM aTable WHERE state=cast(  1  as bit)
union all
select * 
FROM
(select TOP  100  * FROM aTable WHERE state=cast(  0  as bit) order by id) X
order by state desc, id
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.12.2017, 10:35
    #39575241
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Есть таблица в которой 4 поля: id, global_id, сумма, дата. Необходимо SELECT запросом получить таблицу с полями: global_id, сумма предпоследней записи, сумма последней записи (последняя и предпоследняя запись с т.з. даты) при этом что бы суммы были не равны.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with
  t (id, global_id, summa, date_ins) as
    (
		select 1, 1000, 100, '16.09.2017' union all
		select 2, 2000, 200, '16.09.2017' union all
		select 3, 3000, 300, '16.09.2017' union all
		select 4, 1000, 150, '16.10.2017' union all
		select 5, 2000, 250, '16.10.2017' union all
		select 6, 3000, 350, '16.10.2017' union all
		select 7, 1000, 100, '16.11.2017' union all
		select 8, 2000, 200, '16.11.2017' union all
		select 9, 3000, 300, '16.11.2017' 
    )


Предновогодняя немощь напала.
...
Рейтинг: 0 / 0
25.12.2017, 11:37
    #39575282
Последняя и предпоследняя записи в таблице
tosick4,

и что ты хочешь увидеть на выходе ?
...
Рейтинг: 0 / 0
25.12.2017, 11:53
    #39575298
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Добрый Э - Эх,

Таблицу с полями: global_d, summa_last, summa_prev
...
Рейтинг: 0 / 0
25.12.2017, 13:32
    #39575387
Последняя и предпоследняя записи в таблице
tosick4, давай начнем с прямолинейных зубодробильных вариантов.... глядишь, кто ещё подтянется и предложит более хитрые и менее напряжные для сервера варианты...

Код: sql
1.
2.
3.
4.
5.
6.
7.
select top(2) t0.*
  from t t0
  LEFT join T t1
    on t0.id < t1.id
   and t0.summa = t1.summa
 where t1.id is null
 order by t0.id desC
...
Рейтинг: 0 / 0
25.12.2017, 14:29
    #39575478
tosick4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Последняя и предпоследняя записи в таблице
Добрый Э - Эх, но это видимо какой-то промежуточный результат. Нужно же 3 поля: global_id, summa_last (последнее значение суммы), summa_prev (предпоследнее значение суммы)

Код: sql
1.
2.
3.
id	global_id	summa	date_ins
9	3000	300	2017-11-16
8	2000	200	2017-11-16
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Последняя и предпоследняя записи в таблице / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]