Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос про стрелки часов / 25 сообщений из 32, страница 1 из 2
19.05.2021, 06:38
    #40071204
JuliaYarr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Доброе время суток всем.

Есть таблица со временем:

01:00
08:43
12:00
15:15
....

Как выбрать время, при котором стрелки часов совпадают?

В инете читала про стрелки часов.

но как оформить в запрос никак не могу сообразить?
...
Рейтинг: 0 / 0
19.05.2021, 06:54
    #40071205
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr
Доброе время суток всем.

Есть таблица со временем:

01:00
08:43
12:00
15:15
....

Как выбрать время, при котором стрелки часов совпадают?

В инете читала про стрелки часов.

но как оформить в запрос никак не могу сообразить?
а часовая стрелка - не движется в течении часа ?
Какой ожидается ответ на заданных данных ? - 15:15 ?
...
Рейтинг: 0 / 0
19.05.2021, 07:05
    #40071206
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
вообщем, если "угадал" то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with cte(dt) as (
	select '01:00' union all
	select '08:43' union all
	select '12:00' union all
	select '15:15'),
cte1 as (
	select 
		cast(left(dt,2) as decimal) as h
		,cast(right(dt,2) as decimal) as m
	from cte)
select 
	*
from cte1 
where (h % 12) / 12 = m / 60


hm1201515
...
Рейтинг: 0 / 0
19.05.2021, 11:27
    #40071268
DaniilSeryi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr,

Это где такие задачки дают?
...
Рейтинг: 0 / 0
19.05.2021, 12:50
    #40071291
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr
Как выбрать время, при котором стрелки часов совпадают?
Если время без секунд - только в полдень и полночь.
...
Рейтинг: 0 / 0
19.05.2021, 12:52
    #40071292
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
court, 15:15 - неверно... ибо часовая в это время прошла чуть больше, чем минутная. даже в 15:16 угол между ними будет меньше, чем в 15:15.
...
Рейтинг: 0 / 0
19.05.2021, 13:47
    #40071304
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Akina
court, 15:15 - неверно... ибо часовая в это время прошла чуть больше, чем минутная. даже в 15:16 угол между ними будет меньше, чем в 15:15.
я из этого предположения сделал
court
а часовая стрелка - не движется в течении часа ?

court
вообщем, если "угадал" то так

нуу, т.е. стрелки движутся "дискретно": часовая - раз в час, минутная - раз в минуту

так-то, - "да", если всё "по настоящему" ), то можно и никаких проверок не делать, - 22324127
имхо, и с секундами точного соответствия не получится, - тут дай Б-г что бы точности представления типа Time / DateTime2 на это хватило ...
...
Рейтинг: 0 / 0
19.05.2021, 14:20
    #40071322
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
court
имхо, и с секундами точного соответствия не получится

с точностью до 4-го знака после запятой, в "долях круга" )
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
;with cte as (
	select cast(0 as decimal(18,8)) as s
	union all
	select cast(s+1 as decimal(18,8)) from cte where s < 12*60*60 - 1
)
select
	cast(s as int) as s
	,s / (12*60*60) as h
	,(s % 60) / 60 as m
	,abs(s / (12*60*60) - (s % 60) / 60) as delta
from cte 
--where s / (12*60*60) = (s % 60) / 60
order by 4
option(maxrecursion 0) 


shmdelta00.00000000000000000000.000000000000.0000000000000000000424790.98331018518518518510.983333333330.00002314814481481497210.01668981481481481480.016666666660.0000231481548148148417580.96662037037037037030.966666666660.000046296289629629714420.03337962962962962960.033333333330.000046296299629629621630.05006944444444444440.050000000000.0000694444444444444410370.94993055555555555550.950000000000.0000694444444444445403160.93324074074074074070.933333333330.000092592589259259328840.06675925925925925920.066666666660.0000925925992592592395950.91655092592592592590.916666666660.0001157407340740741...
...
Рейтинг: 0 / 0
19.05.2021, 14:33
    #40071336
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
не правильно немного было, но суть та же
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
;with cte as (
	select cast(0 as decimal(18,8)) as s
	union all
	select cast(s+1 as decimal(18,8)) from cte where s < 12*60*60 - 1
)
select
	cast(s as int) as s
	,s / (12*60*60) as h
	,(s % (60 * 60)) / (60 * 60) as m
	,abs(s / (12*60*60) - (s % (60 * 60)) / (60 * 60))  as delta
from cte 
-- where s / (12*60*60) = (s % (60 * 60)) / (60 * 60) 
order by 4
option(maxrecursion 0) 
...
Рейтинг: 0 / 0
19.05.2021, 14:50
    #40071353
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Решение сводится к нормализации значения положения стрелок относительно циферблата и сравнению результата, поскольку каждый тип стрелки работает в своей системе измерений. Опять же, необходимо соглашение о точности нормализации.
...
Рейтинг: 0 / 0
20.05.2021, 07:12
    #40071552
JuliaYarr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Всем добрый день.

Задачки про стрелки часов встречаются на олимпиадах, ЕГЭ, в сборниках занимательных задачек.

И вот в SQL тоже есть задачки с ними.

Из того, что нашла в инете про стрелки:

Решение. За сутки минутная стрелка делает 24 оборота, а часовая – 2 оборота. Значит, минутная стрелка обгоняет часовую 22 раза. В момент обгона они совпадают. При этом одна полночь учитывается, а вторая – нет. Моменты совпадения стрелок разбивают сутки на 22 равных отрезка. На каждом таком отрезке стрелки один раз образуют развернутый угол и два раза перпендикулярны, когда минутная стрека впереди и когда позади часовой на 90°.

00:00 1:05 2:11 3:16 4:22 5:27 6:33 7:38 8:44 9:49 10:55 12:00 13:05 14:11 15:16 16:22 17:27 18:33 19:38 20:44 21:49 22:55

1 сутки - это 86 400 секунд (24 х 60 х 60).

Часовая и минутная стрелки совпадают через 1 час 5 минут 27,3 секунды = 39 27,3
секунды

86 400/39 27,3 = 21,9998 раз

Ответ: в течение суток часовая и минутная стрелки совпадают 22 раза.

Вот это решение я хотела использовать для запроса.

Но смущало то, что в моих данных нет секунд, только час и минуты.

Думала, думала, и вот как придумала.
На основе статей: http://mathemlib.ru/books/item/f00/s00/z0000003/st029.shtml
https://habr.com/ru/post/67066/

1. с помощью формул получила время, когда стрелки часов совпадают или при смене стрелок местами показывают реальное время
CONVERT(VARCHAR,DATEADD(SECOND,120*360*(12*n+m)/143,0),8) time1
CONVERT(VARCHAR,DATEADD(SECOND,120*360*(12*m+n)/143,0),8) time2

m и n принимают значения от 0 до 23

2. Выбрала значения, когда time1 =time2, т.е. время, когда стрелки часов пересекаются.

3. ну и в итоге выбрала значения из исходной таблицы CONVERT(VARCHAR(5),time,8) на вхождение в п.2
...
Рейтинг: 0 / 0
20.05.2021, 10:05
    #40071568
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Зачем посредством SQL решать такие задачи?
Вот решите такую: есть 40 (хотябы) чисел и нужно найти все варианты сумма которых равна некоему числу Х.
На Питоне это занимает около 10 строк кода и ~1 мин на обычном ПК. А на MS SQL это километр кода, который повесит даже хороший сервер ))
...
Рейтинг: 0 / 0
20.05.2021, 10:35
    #40071577
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr
Как выбрать время, при котором стрелки часов совпадают?

Легко. Вывести 12:00 и 0:00, если оно есть.
...
Рейтинг: 0 / 0
20.05.2021, 10:39
    #40071581
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr
Часовая и минутная стрелки совпадают через 1 час 5 минут 27,3 секунды = 39 27,3 секунды

Код: sql
1.
2.
3.
4.
5.
with t as ( select t = cast( '00:00' as time) , n = 0
            union all
            select t = dateadd(ms, 3927300, t), n = n + 1 from t where n < 21
          )
select * from t


Ну что тут "программировать"?
...
Рейтинг: 0 / 0
20.05.2021, 10:43
    #40071585
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
JuliaYarr,

Без точного времени в миллисекундах они совпадают ровно 2 раза. Задачка не имеет смысла, а олимпиады из таких задачек - шоу дрессированных мартышек на потеху комиссии неудачников.


Ничего этого не нужно. Решали бы лучше задачи типа a*, на основные структуры данных, ссылки/указатели, обход вложенных структур или деревьев. Нормализовали бы лучше таблицу из нф1 в конце концов, чтобы потом не тупить на форуме, а то половина выпускников элементарного потом не может.
...
Рейтинг: 0 / 0
20.05.2021, 10:44
    #40071587
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
aleks222
Ну что тут "программировать"?

Код: sql
1.
select * from t where t.time = '00:00' or t.time = '12:00'


Именно.
...
Рейтинг: 0 / 0
20.05.2021, 10:51
    #40071592
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Решение может быть основано и на измерении скорости и пройденного расстояния.
...
Рейтинг: 0 / 0
20.05.2021, 10:51
    #40071593
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
crutchmaster
JuliaYarr,

Без точного времени в миллисекундах они совпадают ровно 2 раза. Задачка не имеет смысла, а олимпиады из таких задачек - шоу дрессированных мартышек на потеху комиссии неудачников.


Ничего этого не нужно. Решали бы лучше задачи типа a*, на основные структуры данных, ссылки/указатели, обход вложенных структур или деревьев. Нормализовали бы лучше таблицу из нф1 в конце концов, чтобы потом не тупить на форуме, а то половина выпускников элементарного потом не может.


Можно поточнее - где-то до тысячных секунды:
Код: sql
1.
2.
3.
4.
5.
with t as ( select t = cast( '00:00' as time) , n = 0
            union all
            select t = dateadd(ms, 3927273, t), n = n + 1 from t where n < 21
          )
select * from t



Можно еще коррекцию на 12:00 поставить - будет точнее кремлевских курантов.
...
Рейтинг: 0 / 0
21.05.2021, 16:38
    #40071989
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Oleg_SQL
Зачем посредством SQL решать такие задачи?
Вот решите такую: есть 40 (хотябы) чисел и нужно найти все варианты сумма которых равна некоему числу Х.
На Питоне это занимает около 10 строк кода и ~1 мин на обычном ПК. А на MS SQL это километр кода, который повесит даже хороший сервер ))


Пока что повесили меня :)

Бррр. Ужас! Блин, как такое в голову-то приходит?!
...
Рейтинг: 0 / 0
21.05.2021, 17:03
    #40071999
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Кесарь,

Бухгалтерия просила найти платежки из которых могла сложиться сумма. Дело было года 2 назад. Подробно смысл их ошибки не помню. Платежек было "всего то" штук 40.

Решил напролом - посредством MS SQL ))
Всех возможных вариантов для проверки - 2 в 40 степени = 1 099 511 627 776.
1. Создать этот список
2. Проверить на равна ли сумма всех полей нужной

Собственно вся проблема в 1-м пункте.

Таких сумм нужно было найти несколько (из разного числа платежек)
...
Рейтинг: 0 / 0
21.05.2021, 17:21
    #40072005
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Вообще сдаётся мне, что задача такая должна быть уже давно решена и найден алгоритм, сильно умными людьми, сокращающий поиск в нцать раз.
...
Рейтинг: 0 / 0
21.05.2021, 17:24
    #40072007
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Кесарь
Вообще сдаётся мне, что задача такая должна быть уже давно решена и найден алгоритм, сильно умными людьми, сокращающий поиск в нцать раз.


На тот момент я не нашел
...
Рейтинг: 0 / 0
21.05.2021, 17:40
    #40072012
Агрох
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Oleg_SQL
Кесарь,

Бухгалтерия просила найти платежки из которых могла сложиться сумма. Дело было года 2 назад. Подробно смысл их ошибки не помню. Платежек было "всего то" штук 40.

Решил напролом - посредством MS SQL ))
Всех возможных вариантов для проверки - 2 в 40 степени = 1 099 511 627 776.
1. Создать этот список
2. Проверить на равна ли сумма всех полей нужной

Собственно вся проблема в 1-м пункте.

Таких сумм нужно было найти несколько (из разного числа платежек)


Честно говоря задача довольно тривиальная для SQL:

Код: sql
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.
WITH R0 AS (
SELECT 1 As val, 1 AS num
UNION ALL 
SELECT val + 1 AS val, num + 1 AS num FROM R0 WHERE num < 40
), R2 AS (
SELECT CAST(val AS VARCHAR(500)) AS v_s, val, num, 1 AS a
FROM R0
WHERE num = 1

UNION ALL
  
SELECT CAST(CONCAT(a.v_s, '+', CAST(b.val AS VARCHAR(500))) AS VARCHAR(500)) AS v_s, a.val + b.val, a.num + 1 AS num, 2 AS a
FROM R2 AS a
  INNER JOIN R0 AS b
  	ON b.num = a.num + 1

UNION ALL
  
SELECT CAST(b.val AS VARCHAR(500)) AS v_s, b.val, b.num, 1 AS a
FROM R2 AS a
  INNER JOIN R0 AS b
  	ON b.num = a.num + 1
  	  AND a.a = 1
)
SELECT R2.v_s, R2.val 
FROM R2
WHERE R2.a = 2
  AND R2.val = 100




P/S Хотя нет, немного не доработал
...
Рейтинг: 0 / 0
21.05.2021, 17:44
    #40072014
Кесарь
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Oleg_SQL
Кесарь
Вообще сдаётся мне, что задача такая должна быть уже давно решена и найден алгоритм, сильно умными людьми, сокращающий поиск в нцать раз.


На тот момент я не нашел


С такими задачами так бывает. Надо помнить/знать либо общепринятое в математике название задачи, либо помнить название алгоритма.


P.S. Вы плохо искали. Это "задача о рюкзаке" или "задача о сумме подмножеств":

http://www.excelworld.ru/forum/3-5196-1

https://nauchforum.ru/studconf/tech/xx/6006
...
Рейтинг: 0 / 0
21.05.2021, 17:48
    #40072017
Oleg_SQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос про стрелки часов
Агрох,

Поставьте в конце

AND R2.val = 35+18

В списке это будет?

У вас всего 840 вариантов... А их триллион

Суммы были миллионные и с копейками ))
И суммы могли повторяться
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос про стрелки часов / 25 сообщений из 32, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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