Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как в mysql получить первое число месяца текущего времени / 25 сообщений из 62, страница 1 из 3
14.04.2016, 10:18
    #39215337
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
Здравствуйте , я новичок не судите строго
подробнее таблица dirty_data

ddl
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `dirty_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_record` datetime NOT NULL,
  `date1_record` date NOT NULL,
  `lic_sch` varchar(16) DEFAULT NULL,
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `kod_st` varchar(8) DEFAULT NULL,
  `kod_tn` varchar(8) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `data_new` int(11) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



В эту таблицу ежемесячно буду записывать по 60 тыс записей с помощью хранимки
поле date_record хочу использовать как текущее время записи (наверняка надо брать с минутами и секундами, тип посоветуйте)
поле date1_record будет использоваться как первое число месяца даты записи

остальные поля заполняет запрос

посоветуйте какие ключевые поля использовать , по каким полям лучше индексы построить,
поле лицевой счет будет уникальным


Еще список полей в таблице не окончательный(добавлю 6) , эти поля будут заполняться из веб сервиса
по полю лиц счет и полю первое чило месяца(т е date1_record)
...
Рейтинг: 0 / 0
14.04.2016, 11:28
    #39215416
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
как по дефалту присвоить текущее время, и первое число месяца/?
...
Рейтинг: 0 / 0
14.04.2016, 11:31
    #39215423
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7как по дефалту присвоить текущее время,timestamp on default current_timestamp

olegon7и первое число месяца/?только извне или триггером
...
Рейтинг: 0 / 0
14.04.2016, 11:32
    #39215425
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7поле date1_record будет использоваться как первое число месяца даты записиЗачем вообще это поле?
...
Рейтинг: 0 / 0
14.04.2016, 11:33
    #39215428
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7поле лицевой счет будет уникальнымТ.е. по каждому лицевом счету будет не более одной операции (или что там в этой таблице) ?
...
Рейтинг: 0 / 0
14.04.2016, 11:34
    #39215430
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
miksoft,

подозреваю, что уникальной будет пара "счёт-месяц"
...
Рейтинг: 0 / 0
14.04.2016, 12:00
    #39215465
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
tanglir,

правильно именно счет месяц

60 тыс лиц счетов январь
60 тыс лиц счетов феврвль

и т д
лицевые счета будут повторятся ежемесячно

поле date1_record и нужно для идентификации месяца ....
в основном запросы будкт строится получить счета за такой то месяц where date1_record=январь

поле date_record как время записи в таблицу уже с учетом часов минут
...
Рейтинг: 0 / 0
14.04.2016, 12:03
    #39215470
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
например если записал 3 -его числа - а данные ошибочны , потому что записать одни и те же данные можно записать несколько раз в месяц что бы без проблем смог удалить лишние
...
Рейтинг: 0 / 0
14.04.2016, 12:11
    #39215484
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
tanglir,

а если так? timestamp (4) ограничить он будет выдавать месяц год так?

Запросом я могу выбрать из него нужный месяц?
...
Рейтинг: 0 / 0
14.04.2016, 12:17
    #39215491
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7timestamp (4) ограничить он будет выдавать месяц год так?Нет.
В MySQL нет готового и удобного типа данных для хранения только года-месяца.
А timestamp(4) означает обычный timestamp с дополнительными четырьмя знаками после запятой. Т.е. с точностью до 100 мкс.
...
Рейтинг: 0 / 0
14.04.2016, 13:05
    #39215557
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
хранимка выполняется с ошибкой 1136 - Column count doesn't match value count at row 1

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE DEFINER=`Oleg`@`` PROCEDURE `zap_copy`()
BEGIN
INSERT INTO dirty_data
	select 
kartab_askue.lic_sch from kartab_askue
where del=0 ;
END
...
Рейтинг: 0 / 0
14.04.2016, 13:06
    #39215559
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
в чем причина?
...
Рейтинг: 0 / 0
14.04.2016, 13:10
    #39215571
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
все исправил)
...
Рейтинг: 0 / 0
14.04.2016, 13:10
    #39215572
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7,

Буквальный перевод - Количество колонок не соответствует количеству значений.
...
Рейтинг: 0 / 0
14.04.2016, 13:35
    #39215603
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
miksoft,
так что вы посоветуете с датой
использовать 2 поля c типом datetime

по умолчанию они должны быть заполнены константой(null либо empty)

а если при инсерте в коде хранимки прописать

что бы поля date1_record и date_record заполнялись функциями now() и если есть такая функция обрезания до месяца год(если конечно есть такая в mysql)

вот хранимка
Код: 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.
BEGIN
INSERT INTO dirty_data (date_record,lic_sch,data_kon,date_kon,base,fam,`name`,otch,cod_tn,cod_st,data_new,yearmon)
select 
now() As time1,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
kartab_askue.fam,
kartab_askue.`name`,
kartab_askue.otch,
kartab_askue.cod_tn,
kartab_askue.cod_st,
t1.data_new,
t1.yearmon
from 
kartab_askue Left JOIN 
(select MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) As t1 
on kartab_askue.lic_sch=t1.lic_sch
where kartab_askue.del=0
END
...
Рейтинг: 0 / 0
14.04.2016, 13:45
    #39215618
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7так что вы посоветуете с датойКакой-то гибрид надо делать. Какой именно - много от чего зависит.
Например, как изначально предполагалось, в поле DATE хранить первое число месяца. Или в числом поле хранить число формата YYYYMM (например 201604). Или в строковом поле "2016-04". Т.е. вариантов множество.

Заполнять придется или триггером, или тем INSERT-ом, который будет писать данные в таблицу.

olegon7функция обрезания до месяца год(если конечно есть такая в mysql)EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03')
DATE_FORMAT('2009-10-04 22:23:00', '%Y %m')
...
Рейтинг: 0 / 0
14.04.2016, 13:47
    #39215621
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
Кстати, у нас в одной из таблиц вообще год и месяц выделены в отдельные числовые поля - тоже вариант.
...
Рейтинг: 0 / 0
15.04.2016, 11:56
    #39216467
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
miksoft,
решил месяц_дату хранить в одном поле в строковом виде

вот ddl таблички
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `dirty_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `date_record` date NOT NULL,
  `mon_year` varchar(7) NOT NULL,
  `lic_sch` varchar(16) DEFAULT NULL,
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `kod_st` varchar(8) DEFAULT NULL,
  `kod_tn` varchar(8) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `data_new` int(11) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=196607 DEFAULT CHARSET=utf8;



подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении?
mon_year задал 7 знаков максимально возможное 12-2016 так?
как расставить правильно уникальные ключи?
первичный ай-ди так?
предпологается что раз в месяц в таблицу будет падать по 60 тыс записей лиц счеты уникальны в пределе месяца , т е поля mon_year
по таблице вообще куча настроек , например тип таблицы какой правильнее InnoDB?
подскажите новичку уважаемые гуру?
...
Рейтинг: 0 / 0
15.04.2016, 11:57
    #39216469
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
код хранимки
Код: 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.
29.
30.
CREATE DEFINER=`Oleg`@`` PROCEDURE `zap`()
BEGIN
INSERT INTO dirty_data(mon_year,date_record,lic_sch,data_kon,date_kon,base,fam,`name`,otch,kod_tn,kod_st,data_new,yearmon)
	select 
DATE_FORMAT(CURRENT_DATE(),'%c-%Y') As mon_year,
now() As date_record,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
kartab_askue.fam,
kartab_askue.`name`,
kartab_askue.otch,
kartab_askue.cod_tn,
kartab_askue.cod_st,
t1.data_new,
t1.yearmon
from 
kartab_askue Left JOIN 
(select MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) As t1 
on kartab_askue.lic_sch=t1.lic_sch
where kartab_askue.del=0;

END
...
Рейтинг: 0 / 0
15.04.2016, 12:03
    #39216479
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении?У целочисленных полей семейства INT число в скобках ничего не означает.
Т.е. unsigned int - это всегда число от 0 до 4294967295.

Посчитайте с какой интенсивностью будут добавляться записи и разделите 4294967295 на нее. Если вдруг полученный срок будет слишком мал для срока жизни системы, то используйте BIGINT. Его хватит точно.
...
Рейтинг: 0 / 0
15.04.2016, 12:04
    #39216480
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7mon_year задал 7 знаков максимально возможное 12-2016 так?Я бы сделал впереди год, а потом месяц. Чтобы порядок строковой сортировки совпадал с натуральным.
...
Рейтинг: 0 / 0
15.04.2016, 12:06
    #39216483
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7как расставить правильно уникальные ключи?(`mon_year`, `lic_sch`)
Либо в обратном порядке, зависит от запросов, которые будут использовать этот индекс.
...
Рейтинг: 0 / 0
15.04.2016, 12:06
    #39216484
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
olegon7подскажите автоискремент я правильно задал? 10 знаков? что будет при его переполнении? 2633664
olegon7mon_year задал 7 знаков максимально возможное 12-2016 так?если фиксированная длина, можно просто char(7)
...и вообще, зачем 7, если можно 6? и почему месяц перед годом?
olegon7как расставить правильно уникальные ключи?Что должно быть уникально, на то и делать ключи. В вашем случае это (mon_year,lic_sch). Или в обратном порядке - зависит от того, какие запросы будут к базе.
"AUTO_INCREMENT=196607" - убрать.
olegon7
Код: sql
1.
2.
3.
from 
kartab_askue Left JOIN 
(select 

Шо, опять?! (с)
olegon7
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
MAX(kartkvgd_askue.yearmon) As yearmon,
MAX(kartkvgd_askue.data_new) As data_new, 
kartkvgd_askue.lic_sch As lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch

...
Рейтинг: 0 / 0
15.04.2016, 12:06
    #39216485
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
miksoft,

спасибо за совет) я думаю надолго хватит))
...
Рейтинг: 0 / 0
15.04.2016, 12:13
    #39216492
olegon7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как в mysql получить первое число месяца текущего времени
miksoft,

запросы будут как правило получить все лицевые счета за такой то месяц

и внутри уже условия where
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как в mysql получить первое число месяца текущего времени / 25 сообщений из 62, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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