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

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

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

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

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

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

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

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

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

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

но как оформить в запрос никак не могу сообразить?
а часовая стрелка - не движется в течении часа ?
Какой ожидается ответ на заданных данных ? - 15:15 ?
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40071268
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuliaYarr,

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

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

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

так-то, - "да", если всё "по настоящему" ), то можно и никаких проверок не делать, - 22324127
имхо, и с секундами точного соответствия не получится, - тут дай Б-г что бы точности представления типа Time / DateTime2 на это хватило ...
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40071353
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение сводится к нормализации значения положения стрелок относительно циферблата и сравнению результата, поскольку каждый тип стрелки работает в своей системе измерений. Опять же, необходимо соглашение о точности нормализации.
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40071568
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зачем посредством SQL решать такие задачи?
Вот решите такую: есть 40 (хотябы) чисел и нужно найти все варианты сумма которых равна некоему числу Х.
На Питоне это занимает около 10 строк кода и ~1 мин на обычном ПК. А на MS SQL это километр кода, который повесит даже хороший сервер ))
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #40071577
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuliaYarr
Как выбрать время, при котором стрелки часов совпадают?

Легко. Вывести 12:00 и 0:00, если оно есть.
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40071585
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuliaYarr,

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


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

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


Именно.
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #40071592
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение может быть основано и на измерении скорости и пройденного расстояния.
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40071989
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL
Зачем посредством SQL решать такие задачи?
Вот решите такую: есть 40 (хотябы) чисел и нужно найти все варианты сумма которых равна некоему числу Х.
На Питоне это занимает около 10 строк кода и ~1 мин на обычном ПК. А на MS SQL это километр кода, который повесит даже хороший сервер ))


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

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

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

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

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

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


На тот момент я не нашел
...
Рейтинг: 0 / 0
Запрос про стрелки часов
    #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
Запрос про стрелки часов
    #40072014
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SQL
Кесарь
Вообще сдаётся мне, что задача такая должна быть уже давно решена и найден алгоритм, сильно умными людьми, сокращающий поиск в нцать раз.


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


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


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

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

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

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

AND R2.val = 35+18

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

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

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


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