Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2012, 23:58   #1
moroz11
 
Регистрация: 21.10.2011
Сообщений: 7
По умолчанию Как выбрать данные за максимальную дату

Запрос

Код:
select distinct p.t,t.kk,t.rt,t.date
		from tab t
		join (
		  select 1 t, 1 d1, 10 d2 from tab
		  union all
		  select 2 t, 11 d1, 20 d2 from tab
		  union all
		  select 3 t, 21 d1, 31 d2 from tab) p on extract(day from t.date) between p.d1 and p.d2
		where date between '2012-08-01' and '2012-08-14' and stat='1'
Цитата:
t kk rt date
1 0 0 2012-08-01
1 210 7,5 2012-08-02
1 210 7,5 2012-08-03
1 210 7,5 2012-08-04
1 210 7,5 2012-08-05
1 210 7,5 2012-08-06
1 210 7,5 2012-08-07
1 210 8,8 2012-08-08
1 210 8,8 2012-08-09
1 210 8,8 2012-08-10
2 200 8,8 2012-08-11
2 200 8,8 2012-08-12
2 200 8,8 2012-08-13
2 200 8,8 2012-08-14
Мне надо из этого запроса выбрать данные за максимальную дату каждой декады месяца,т.е. у меня должны в запросе остаться только 2 строки (за 10 и 14 августа):
Цитата:
1 210 8,8 2012-08-10
2 200 8,8 2012-08-14
Спасибо.

Последний раз редактировалось Stilet; 30.08.2012 в 10:10.
moroz11 вне форума Ответить с цитированием
Старый 30.08.2012, 10:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
select distinct p.t,t.kk,t.rt,t.date
		from tab t
		join (
		  select 1 t, 1 d1, 10 d2 from tab
		  union all
		  select 2 t, 11 d1, 20 d2 from tab
		  union all
		  select 3 t, 21 d1, 31 d2 from tab) p on extract(day from t.date) between p.d1 and p.d2
		where date between '2012-08-01' and '2012-08-14' and stat='1'
 and (year(date)=(select max(year(date)) from tab))
 and (month(date)=(select max(month(date)) from tab where year(date)=max(year(date))))
 and (day(date) % 10 = 1)
 or (date=(select max(date) from tab))
Как-то так...
Особо не разбирался, проверять нечего.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.08.2012, 10:31   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select p.t,t.kk,t.rt,t.date
from t
inner join ( select 1 as t,  1 as d1, 10 as d2, max(day) as maxday from table where day beetwen '2012-08-01' and '2012-08-10'  and stat=1
       union select 2 as t, 11 as d1, 20 as d2, max(day) as maxday from table where day beetwen '2012-08-11' and '2012-08-20' and stat=1
       union select 3 as t, 21 as d1, 31 as d2, max(day) as maxday from table where day beetwen '2012-08-21' and '2012-08-31' and stat=1
          ) as p on t.day =p.maxday
where day beetwen '2012-08-01' and '2012-08-14'
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.08.2012 в 10:37.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбрать данные из 3х таблиц? Толя123 SQL, базы данных 0 14.12.2011 16:01
как выбрать данные из таблицы и занести их в Edit Лера123 Помощь студентам 1 16.10.2010 14:35
как выбрать несовпадающие данные из двух таблиц Tatu Microsoft Office Access 2 16.03.2010 20:41
Как из нескольких файлов *.xls выбрать нужные данные суммировать их и скопировать в уже готовую форму Иван123456 Microsoft Office Excel 2 07.08.2009 21:50
открываю документ. ввожу дату и другие данные, как сделать чтобы на другой странице велась статистика по Аленка Microsoft Office Excel 5 12.02.2008 17:36