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

Откуда:
Сообщений: 261
Здравствуйте всем-всем

Пожалуйста подскажите как мне быть. Есть 2 таблицы
Первая (DrillingDetail) содержит дату бурения(DrillingDate) и имя скважины(holeID), ну и еще всякие столбцы
Вторая (GeoInterval)содержит имя скважины(holeID), от(From), до(To), еще столбцы(Value)

Необходимо получить такую таблицу, чтобы интервалы из второй таблицы отображались только за конкретную дату DrillingDate
Вот например бурилась скважина с 14 по 28 октября, я хочу посмотреть только сколько пробурили 25 октября, а мой скрипт выдает скважину целиком. Помогите, пожалуйста
select GEODETAILS.holeid, GEODETAILS.GEOLFROM, GEODETAILS.GEOLTO ,drillingdate
from
GEODETAILS left join DRILLINGDETAIL
on
GEODETAILS.holeid = DRILLINGDETAIL.holeid

where DRILLINGDATE = '26-oct-2017'
11 янв 18, 09:07    [21095616]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleksrov
Member

Откуда:
Сообщений: 948
katish444,

Если я вас правильно понял, то уберите Left
11 янв 18, 09:14    [21095640]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
не сработало, я и inner join пробовала...
11 янв 18, 09:17    [21095647]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleks222
Guest
katish444
не сработало, я и inner join пробовала...

Не сработало "что"?

1. ЭТО "сработало"
[src]
select GEODETAILS.holeid, GEODETAILS.GEOLFROM, GEODETAILS.GEOLTO ,drillingdate
from
GEODETAILS inner join DRILLINGDETAIL
on
GEODETAILS.holeid = DRILLINGDETAIL.holeid

--where DRILLINGDATE = '26-oct-2017'

[src]

2. Даты пишите почеловечески '20171026'

3. И будет вам щастье...
11 янв 18, 09:29    [21095680]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
Не сработало.
По прежнему выдает интервалы за все время бурения, не знаю почему

Дело не в записи даты (все остальные фильтра работают с таким форматом)

Нет у меня счастья....а ведь теоретически должно быть
11 янв 18, 09:34    [21095702]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
iiyama
Member

Откуда:
Сообщений: 642
katish444,
select GEODETAILS.holeid, GEODETAILS.GEOLFROM, GEODETAILS.GEOLTO ,drillingdate 
from 
GEODETAILS join DRILLINGDETAIL 
on 
GEODETAILS.holeid = DRILLINGDETAIL.holeid  AND DRILLINGDATE BETWEEN GEODETAILS.GEOLFROM AND GEODETAILS.GEOLTO

where DRILLINGDATE = '20171026'
11 янв 18, 10:36    [21095955]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
iiyama,

DrillingDate - varchar, поэтому дату нужно писать так как у меня написано.

Суть не в этом. Во второй таблицы интервалы и имя скважины, а в первой имя скважины, дата бурения и количество пробуренного за сутки, то есть интервалов от-до там нет, поэтому не так все просто. Чтобы получилось то, что я хочу нужно складывать пробуренный интервалы. Но я не совсем поняла как. Создала виртуальную таблицу, а дальше как быть? Цикл какой-то нужен?
11 янв 18, 11:40    [21096307]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
iiyama
Member

Откуда:
Сообщений: 642
katish444,
В таком случае с Вас скрипты создания таблиц, наполнение данными (тестовыми) и образец желаемого результата.
11 янв 18, 11:47    [21096363]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
Кусочек
Guest
iiyama
katish444,
В таком случае с Вас скрипты создания таблиц, наполнение данными (тестовыми) и образец желаемого результата.


https://www.sql.ru/forum/127456/rekomendacii-po-oformleniu-soobshheniy-v-forume

Пункты 4 и 6.
11 янв 18, 11:54    [21096409]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
HoleID DrillingDate TotalDrillDepth
1 25-oct-2017 11
1 26-oct-2017 57
1 27-oct-2017 43
2 25-oct-2017 38


Вот есть такая таблица. Как сделать так, чтобы по запросу на конкретную дату он выдавал сумму TotalDrillDepth
То есть например на 27 октября пробурено всего 43+57+11
11 янв 18, 11:56    [21096420]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
Кусочек
Guest
katish444
HoleID DrillingDate TotalDrillDepth
1 25-oct-2017 11
1 26-oct-2017 57
1 27-oct-2017 43
2 25-oct-2017 38


Вот есть такая таблица. Как сделать так, чтобы по запросу на конкретную дату он выдавал сумму TotalDrillDepth
То есть например на 27 октября пробурено всего 43+57+11


DrillingDate - это просто произвольная строка?
11 янв 18, 11:58    [21096427]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
katish444,
'26-oct-2017'
вам понравится сортировать даты в варчаре

CAST(DRILLINGDATE as date) по таблице у вас проходит?
11 янв 18, 12:00    [21096437]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
Блин, предыдущее сообщение вообще не читабельно получилось

Первая таблица GeoInterval (holeid, geolFrom, geolTo, priority) все varchar
insert into Geointerval (Uz-1, 0, 15, Al)
insert into Geointerval (Uz-1, 15, 18, Al)

Вторая таблица DrillingDetail (holeid, drillingdate, totaldrilldepth) все varchar
insert into Geodetail (Uz-1, 25-oct-2017, 15)
insert into Geodetail (Uz-1, 26-oct-2017, 3)


Мне нужно получить таблицу как Geointerval, но при этом иметь возможность сортировать по дате бурения.
Просмотреть с какого по какой интервал бурили в эту дату
11 янв 18, 12:03    [21096452]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleks222
Guest
katish444
iiyama,

DrillingDate - varchar, поэтому дату нужно писать так как у меня написано.

Суть не в этом.


Суть именно в этом.
Пока вы не научитесь писать даты - датами - вы будет ходить по граблям бесконечно.

AND DRILLINGDATE BETWEEN GEODETAILS.GEOLFROM AND GEODETAILS.GEOLTO

как должон работать на строках?

ЗЫ. Если до вас это не доходит - лучше сразу переквалифицироваться в управдомы.
11 янв 18, 12:03    [21096455]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
TaPaK, да, конечно, я использую CAST
проблема просто не в этом и я опустила лишнее обременения для публикации на формуме
11 янв 18, 12:04    [21096459]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
katish444,

SUM(TotalDrillDepth) OVER (ORDER BY CAST(DrillingDate as date) ROWS UNBOUNDED PRECEDING AND CURRENT ROW)
11 янв 18, 12:08    [21096488]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleks222
Guest
katish444
Блин, предыдущее сообщение вообще не читабельно получилось

Первая таблица GeoInterval (holeid, geolFrom, geolTo, priority) все varchar
insert into Geointerval (Uz-1, 0, 15, Al)
insert into Geointerval (Uz-1, 15, 18, Al)

Вторая таблица DrillingDetail (holeid, drillingdate, totaldrilldepth) все varchar
insert into Geodetail (Uz-1, 25-oct-2017, 15)
insert into Geodetail (Uz-1, 26-oct-2017, 3)


Мне нужно получить таблицу как Geointerval, но при этом иметь возможность сортировать по дате бурения.
Просмотреть с какого по какой интервал бурили в эту дату


Она издевается.

0, 15
и
25-oct-2017

как соотнести?
11 янв 18, 12:09    [21096491]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
aleks222, даты я пишу нормально, всегда преобразую. Программа, в которой я работаю, использует именно так, как я прислала, когда мне необходимо, использую CAST
Проблема ведь у меня не в написании дат, а в том как мне написать цикл, чтобы пробуренные метры складывал друг с другом. Кстати, метры у меня тоже текст, это не ошибка, это особенность БД, т.к. все эти поля виртуальные, вообщем это долго объяснять
11 янв 18, 12:09    [21096497]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
aleks222,
смотри, когда у меня будет таблица, которая складывает TotalDrillingDate до конкретно указанной даты, тогда это число и совпадет с GeolTo, ведь максимальное количество пробьуренных метров и есть интервал "до"
11 янв 18, 12:12    [21096509]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
TaPaK,
спасибо, подскажите current row - это на что он сошлется? какое продолжение должно быть или как не понимаю немного
11 янв 18, 12:15    [21096527]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
Кусочек
Guest
katish444
Мне нужно получить таблицу как Geointerval, но при этом иметь возможность сортировать по дате бурения.
Просмотреть с какого по какой интервал бурили в эту дату


Я, кажется, начала понимать:

geolFrom, geolTo - это с какой глубины до какой дошли в какой шахте неизвестно когда.

drillingdate, totaldrilldepth - это в какую дату в какой шахте сколько прошли за сутки бурения.

Но ведь у Вас нет ключа связи этих таблиц.
11 янв 18, 12:22    [21096560]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
TaPaK, преобразила ваш скрипт до:

select SUM(CAST(TotalDrillDepth) OVER (ORDER BY CAST(DrillingDate as date)dat ROWS UNBOUNDED PRECEDING ) from @Drilling_temp

Пишет ошибку Incorrect syntax near 'ROWS'.

Что не так?
11 янв 18, 12:23    [21096561]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleks222
Guest
declare @DrillingDetail table (holeid varchar(10), drillingdate date, totaldrilldepth int)
insert into @DrillingDetail values('Uz-1', '20171025', 15)
insert into @DrillingDetail values('Uz-1', '20171026', 3)

declare @GeoInterval table (holeid varchar(10), geolFrom int, geolTo int, priority varchar(10));
insert into @Geointerval values('Uz-1', 0, 15, 'Al')
insert into @Geointerval values('Uz-1', 15, 18, 'Al')

-- это для просветления
select *, Total = SUM(TotalDrillDepth) OVER (ORDER BY CAST(DrillingDate as date) ROWS UNBOUNDED PRECEDING ) from @DrillingDetail;

-- ну а это - фсе
with t as (select *, Total = SUM(TotalDrillDepth) OVER (ORDER BY CAST(DrillingDate as date) ROWS UNBOUNDED PRECEDING ) from @DrillingDetail)
  select *
    from @Geointerval as g inner join t on g.holeid = t.holeid and  g.geolFrom < t.total and t.total <= g.geolTo
    order by drillingdate;


ЗЫ. Тредстартера предлагаю зобанить навечно за лень.
11 янв 18, 12:25    [21096572]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
aleksrov
Member

Откуда:
Сообщений: 948
katish444,

Это ограничение окна, значит по текущую строку. Можно изменить на, к примеру Rows between 1 preceding and following, т.е. для каждой текущей строки мы будем считать сумму трех строк (текущая, предыдущая и следующая). Но в таком случае могут быть проблемы с производительностью из-за развертывания всех строк кадра.
11 янв 18, 12:25    [21096573]     Ответить | Цитировать Сообщить модератору
 Re: как ограничить таблицу по датам из другой таблицы  [new]
katish444
Member

Откуда:
Сообщений: 261
Кусочек,

только по HoleID - это имя скважины, оно есть и там и там
Еще если мы приплюсуем TotalDrillDepth на текущую дату - то эта цифра обязательно совпадет с GeolTo, потому что сколько метров набурили - столько и описали
11 янв 18, 12:25    [21096575]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить