2016-08-02 4 views
0

Есть ли способ генерировать случайное число для счета? Я хочу использовать его как уникальный идентификатор для счета, который я делаю. Вот пример запроса:PostgreSQL: генерировать случайное число каждый час

SELECT COUNT(distinct bt.id) AS count, 
     <insert unique id here>  
FROM boats bt 
WHERE bt.created_at >= current_date AND 
     bt.created_at < current_date + INTERVAL '1 day' AND 
     bt.state != 'deactivated'; 

Я хочу, чтобы создать новый номер каждый час.

Желаемая выход

count id 
23  432543 

Над ID должен обновляться каждый час.

+0

Выборочные данные и желаемые результаты будут реально помочь, если вы не просто хотите получить ответ на эффект 'случайных()'. –

+0

Вы каждый день генерируете COUNT? –

+2

Почему вы не используете текущую дату + текущий час как уникальный идентификатор? Генерация случайного числа не гарантирует его уникальности. –

ответ

0

Я предполагаю, что вы хотите:

SELECT h.hh, COUNT(distinct bt.id) AS count, 
FROM generate_series(0, 23) h(hh) LEFT JOIN 
    boats bt JOIN 
    ON extract(hour from bt.created_at) = h.hh AND 
     bt.created_at >= current_date AND 
     bt.created_at < current_date + INTERVAL '1 day' AND 
     bt.state <> 'deactivated' 
GROUP BY h.hh 
ORDER BY h.hh; 

Там нет «случайного» числа в этом. Если вы действительно хотите превратить это в идентификатор, используйте формат YYYYMMDDHH или используйте час в качестве семени для генератора случайных чисел.

0

Вы можете попробовать это

SELECT COUNT(distinct bt.id) AS count, 
     to_char(now(),'YYYYMMDDHH24')::integer AS ID 
FROM boats bt 
WHERE bt.created_at >= current_date AND 
     bt.created_at < current_date + INTERVAL '1 day' AND 
     bt.state != 'deactivated'; 
Смежные вопросы