powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите с запросом
25 сообщений из 44, страница 1 из 2
помогите с запросом
    #38326243
Привет знатокам запросов :-)
прошу тапками сразу не кидаться sql плохо знаю! а тут еще и сервер на каше :-)
значит задача следущая! взять следущею дату за последней датой указанной в фирме по отчетам!
допустим имеется таблица
idid-firmddmmyyyy170101012010270117032010380523042011480501012012580514022012682312092013
--------------------
результат запроса должен получится следующий
idid-firmddmmyyyy170118(17)032010280515(14)022012382313(12)092013
в скобках указал даты которые были в начальной таблице
...
Рейтинг: 0 / 0
помогите с запросом
    #38326254
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
названия полей поменяла, а запрос должно быть такой:

Код: sql
1.
2.
3.
select firm_id,max(firm_date)+1
from my_table
group by firm_id
...
Рейтинг: 0 / 0
помогите с запросом
    #38326256
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)
Код: vbnet
1.
dd.      mm.       yyyy.  


Это все отдельные поля?
...
Рейтинг: 0 / 0
помогите с запросом
    #38326258
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверьте как сработает у вас, если дата приходится на конец месяца, т.е. было 30.06 должно стать 1.07
...
Рейтинг: 0 / 0
помогите с запросом
    #38326260
krvsaВладимир :-)
Код: vbnet
1.
dd.      mm.       yyyy.  


Это все отдельные поля?

именно, в этом и есть вся проблема что это отдельные поля! :(
...
Рейтинг: 0 / 0
помогите с запросом
    #38326261
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaВладимир :-)
Код: vbnet
1.
dd.      mm.       yyyy.  


Это все отдельные поля?

навряд ли, во первых какой в этом смысл, во вторых в названии св-ва не может быть точки "." :)
...
Рейтинг: 0 / 0
помогите с запросом
    #38326262
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочка , если "дата" у автора 3 отдельных поля - твой запрос у него не сработает...
...
Рейтинг: 0 / 0
помогите с запросом
    #38326265
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)это отдельные поля! :(
Ясно...
Ща прикинем как тут разрулиться...
...
Рейтинг: 0 / 0
помогите с запросом
    #38326266
Аленочкаkrvsaпропущено...

Это все отдельные поля?

навряд ли, во первых какой в этом смысл, во вторых в названии св-ва не может быть точки "." :)

это отдельные поля! точек в реальности нету! просто когда печатал они тут сами поставились!
...
Рейтинг: 0 / 0
помогите с запросом
    #38326268
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)krvsaпропущено...

Это все отдельные поля?

именно, в этом и есть вся проблема что это отдельные поля! :(

переведите все ваши отдельные поля в одну дату в формат "horolog"
обратно, я надеюсь, новую дату вы не будете разбивать на составляющие?
...
Рейтинг: 0 / 0
помогите с запросом
    #38326269
АленочкаВладимир :-)пропущено...


именно, в этом и есть вся проблема что это отдельные поля! :(

переведите все ваши отдельные поля в одну дату в формат "horolog"
обратно, я надеюсь, новую дату вы не будете разбивать на составляющие?

очень смешно :-)
я обычный рабочий которому дали задание! базу я не состовлял и изменить мне ее не кто не разрешит!
так что надо искать другой выход!
...
Рейтинг: 0 / 0
помогите с запросом
    #38326271
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-) , как вариант...
Склеить те поля в строку типа "дата"... Воспользоваться функцией TO_DATE()...
http://docs.intersystems.com/cache20131/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_todate
А далее по сченарию от Аленочка .
...
Рейтинг: 0 / 0
помогите с запросом
    #38326272
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделала расчетное св-во в классе где сама дата хранится, которое "соберет" мне нужную дату из частей и юзала бы в запросе именно это расчетное св-во, т.е. дату

преобразование: set dateOfH = $zdateh(mm_"."_dd_"."_yyyy,5)
...
Рейтинг: 0 / 0
помогите с запросом
    #38326273
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аленочкая бы сделала расчетное св-во в классе
Автору не нужно менять класс.
...
Рейтинг: 0 / 0
помогите с запросом
    #38326276
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)очень смешно :-)
я обычный рабочий которому дали задание! базу я не состовлял и изменить мне ее не кто не разрешит!
так что надо искать другой выход!
я имела ввиду "виртуально" перевести с помощью запроса или расчетного свойства
...
Рейтинг: 0 / 0
помогите с запросом
    #38326278
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaАленочкая бы сделала расчетное св-во в классе
Автору не нужно менять класс.
SqlProc тоже подойдет, я предложила свои варианты
вдруг эта дата автору кроме одного отчета еще где-нибудь понадобится
исключительно пишу по собственному опыту, а так можно и через функции преобразования sql
...
Рейтинг: 0 / 0
помогите с запросом
    #38326279
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-) , пробуй это...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
	firm_id,
    TO_DATE(yyyy||'-'||mm||'-'||dd,'yyyy-mm-dd') as indat,
	max(indat) + 1 as outdat
from
	my_table 
group by
	firm_id
...
Рейтинг: 0 / 0
помогите с запросом
    #38326281
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АленочкаSqlProc тоже подойдет
А для этого класс менять не надо?
...
Рейтинг: 0 / 0
помогите с запросом
    #38326303
krvsa Владимир :-) , пробуй это...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
	firm_id,
    TO_DATE(yyyy||'-'||mm||'-'||dd,'yyyy-mm-dd') as indat,
	max(indat) + 1 as outdat
from
	my_table 
group by
	firm_id



попробовал сделать так ругается что " поле indat не найдено в обрабатываемой таблице"
...
Рейтинг: 0 / 0
помогите с запросом
    #38326313
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)это отдельные поля! точек в реальности нету! просто когда печатал они тут сами поставились!Исправил.
...
Рейтинг: 0 / 0
помогите с запросом
    #38326316
servitВладимир :-)это отдельные поля! точек в реальности нету! просто когда печатал они тут сами поставились!Исправил.

спасибо :-)
...
Рейтинг: 0 / 0
помогите с запросом
    #38326325
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-)ругается что " поле indat не найдено в обрабатываемой таблице"
Тогда готовь тестовый пример класса с его заполнением данными - бум тестить у себя...
...
Рейтинг: 0 / 0
помогите с запросом
    #38326335
Александр Коблов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если без indat попробовать?

Код: sql
1.
2.
3.
4.
5.
6.
7.
select
	firm_id,
	max(TO_DATE(yyyy||'-'||mm||'-'||dd,'yyyy-mm-dd')) + 1 as outdat
from
	my_table 
group by
	firm_id
...
Рейтинг: 0 / 0
помогите с запросом
    #38326348
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир :-) ,
Исходные данныеClass demo.test Extends %Persistent
{

Property idfirm As %Integer [ SqlFieldName = "id-firm" ];

Property dd As %String;

Property mm As %String;

Property yyyy As %String;

ClassMethod Test()
{
  &sql(truncate table demo.test)
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(701,'01','01',2010))
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(701,'17','03',2010))
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(805,'23','04',2011))
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(805,'01','01',2012))
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(805,'14','02',2012))
  &sql(insert into demo.test("id-firm",dd,mm,yyyy) values(823,'12','09',2013))
}
}Запросselect
  id,
  "id-firm",
  lpad(day(max(to_date(yyyy||mm||dd,'yyyymmdd'))+1),2,'0') dd,
  lpad(month(max(to_date(yyyy||mm||dd,'yyyymmdd'))+1),2,'0') mm,
  lpad(year(max(to_date(yyyy||mm||dd,'yyyymmdd'))+1),4,'0') yyyy
from demo.test group by "id-firm"Результат:IDid-firmddmmyyyy170118032010380515022012682313092013
...
Рейтинг: 0 / 0
помогите с запросом
    #38326353
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мои 5 копеек...

Класс
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
/// test
Class tmp.test Extends %Persistent
{

/// firm
Property firm As %String;

/// dd
Property dd As %Integer;

/// mm
Property mm As %Integer;

/// yyyy
Property yyyy As %Integer;

}


Заполнение
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
tmp ;;;;[ 01/02/2013 10:34 ]
	d ADD(701,01,01,2010)
	d ADD(701,17,03,2010)
	d ADD(805,23,04,2011)
	d ADD(805,01,01,2012)
	d ADD(805,14,02,2012)
	d ADD(823,12,09,2013)
	q
ADD(Firm,Dd,Mm,Yyyy)
	n o
	s o=##class(tmp.test).%New()
	s o.firm=Firm
	s o.dd=Dd
	s o.mm=Mm
	s o.yyyy=Yyyy
	d o.%Save()
	q


Запрос...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select
	firm,
	max(indat) as maxdat, 
	DATEADD('d',1,max(indat)) as outdat 
from
(
select
	*,
	TO_DATE
	(
		yyyy||'-'||mm||'-'||dd,
		'yyyy-mm-dd'
	)
		as indat
from
	tmp.test 
)
GROUP BY
	firm
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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