Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Как сделать SELECT (nolock) в PostgreSQL ?

Добрый день.

Подскажите как сделать SELECT чтобы он выполнился максимально, аналог грязного чтения в MS SQL. (nolock)
Ответ:
fixed
Вопрос: Как сделать SELECT запрос к таблице в Apache Cassandra в JAVA?

Как в java-файле создать SELECT запрос к таблице в Apache Cassandra? Помогите, пожалуйста.
Заранее спасибо.
Ответ: Yulia1995,

всмысле конструкция такого типа у вас уже есть?

//  Query1.java:  Query an mSQL database using JDBC. 

import java.sql.*;

/**
 * A JDBC SELECT (JDBC query) example program.
 */
class Query1 {
 
    public static void main (String[] args) {
        try {
            String url = "jdbc:msql://200.210.220.1:1114/Demo";
            Connection conn = DriverManager.getConnection(url,"","");
            Statement stmt = conn.createStatement();
            ResultSet rs;
 
            rs = stmt.executeQuery("SELECT Lname FROM Customers WHERE Snum = 2001");
            while ( rs.next() ) {
                String lastName = rs.getString("Lname");
                System.out.println(lastName);
            }
            conn.close();
        } catch (Exception e) {
            System.err.println("Got an exception! ");
            System.err.println(e.getMessage());
        }
    }
}
Вопрос: Помогите сделать выборку

Доброго дня!

Есть таблица:
-- Table: "DOCTOR_CHANGES"

-- DROP TABLE "DOCTOR_CHANGES";

CREATE TABLE "DOCTOR_CHANGES"
(
  "ID" bigserial NOT NULL,
  "START_TIME" timestamp without time zone,
  "END_TIME" timestamp without time zone,
  "CREATION_TIME" timestamp without time zone,
  "CHANGE_TYPE_ID" integer NOT NULL,
  "INFORMATION" character varying(256),
  "DAY" integer,
  "PERIOD" integer,
  "NUMBER_REPETITIONS" integer,
  CONSTRAINT "DOCTOR_CHANGES_pkey" PRIMARY KEY ("ID"),
  CONSTRAINT "CHANGE_TYPE_ID_2" FOREIGN KEY ("CHANGE_TYPE_ID")
      REFERENCES "DOCTOR_CHANGE_TYPE_IDS" ("ID") MATCH SIMPLE
      ON UPDATE CASCADE ON DELETE RESTRICT,
  CONSTRAINT day_of_week CHECK ("DAY"::numeric > 0::numeric AND "DAY"::numeric < 8::numeric),
  CONSTRAINT end_time_more_start_time CHECK ("END_TIME" > "START_TIME"),
  CONSTRAINT positive_change_type_id CHECK ("CHANGE_TYPE_ID" > 0),
  CONSTRAINT positive_period CHECK ("PERIOD" >= 0)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "DOCTOR_CHANGES"
  OWNER TO postgres;

-- Index: "fki_CHANGE_TYPE_ID_2"

-- DROP INDEX "fki_CHANGE_TYPE_ID_2";

CREATE INDEX "fki_CHANGE_TYPE_ID_2"
  ON "DOCTOR_CHANGES"
  USING btree
  ("CHANGE_TYPE_ID");


Просьба помочь сделать выборку не только тех записей, у которых:
1. START_TIME лежит в промежутке между '2015-08-17' и '2015-08-23',
но и
2. START_TIME + i *PERIOD лежит в промежутке между '2015-08-17' и '2015-08-23'
где 1 <= i <= NUMBER_REPETITIONS.
PERIOD - количество секунд в периоде.

Пока что получилось выбрать записи, у кторорых
START_TIME или (START_TIME + NUMBER_REPETITIONS*PERIOD) лежат в промежутке между '2015-08-17' и '2015-08-23':

SELECT
"ID" as dchange_id,
"START_TIME" as start_time,
"PERIOD" as period,
"NUMBER_REPETITIONS" as repeat_number
FROM "DOCTOR_CHANGES"
WHERE 
 (("START_TIME" BETWEEN '2015-08-17' AND '2015-08-23') OR
 (("START_TIME" +  ("NUMBER_REPETITIONS" * "PERIOD")* interval '1 sec') BETWEEN '2015-08-17' AND '2015-08-23'))


Заранее спасибо!
Ответ:
LeXa NalBat
интуитивно понятен
субъективная оценка своих интеллектуальных способностей. Для кого-то и таблица умножения непостижима.

LeXa NalBat
будет ли корректным с учетом возможного перехода на летнее/зимнее время?
в задаче и обозначено "without time zone", но даже, если ориентироваться на with time zone, арифметика интервалов инвариантна к переводу времени:
psql=# select (timestamp with time zone '2010-03-28 01:59:59 Europe/Moscow' + interval '1' second * 2) at time zone 'Europe/Moscow' "туда",
psql-#   extract(epoch from timestamp with time zone '2010-03-28 03:00:01 Europe/Moscow' - timestamp with time zone '2010-03-28 01:59:59 Europe/Moscow') "и обратно";
        туда         | и обратно
---------------------+-----------
 2010-03-28 03:00:01 |         2
(1 row)
Вопрос: В Trigger сделать Select и в зависимости от результата Insert или Update

Нужно в Триггере сделать выборку (обычный Select) и в зависимости от результата выполнить операцию Вставки записи в другую таблицу (Insert) или обновить существующую запись (Update).
Возможно ли такое сделать в СкуЛайте?
Ответ: Upd: coalesce, разумеется, надо за select..where вытаскивать, иначе он на нулевой выборке не сработает и милиционер получится вернётся null. т.е. получится coalesce((select..), default).
Вопрос: как сделать select и одновременно update заселекченых строк?

есть таблица с данными и несколько клиентов.
клиенты делают select * from table where "обработано" isnull limit 10;
как сделать, чтоб клиенты не заселектили одни и те же строки?
ну т.е. каким то образом нужно заапдэйтить заселекченые строки в одной транзакции.
хелп...
Ответ: Sergei.Agalakov,

а никто не спорит, что skip locked штука полезная.
Вопрос: а что ещё надо сделать именно в этой транзакции. Если только проставить статус "в работе" - т.к. нужно сделать медленный вызов внешнего апи - то одного returning без skip locked достаточно.

Или дёрнуть обоих:
update tablename set   ....
where pk in (select pk  from tablename where ... for update skip locked)
returning ...

Что избавляет приложение от необходимости строить update.
Вопрос: Помогите сделать сложный select запрос

Есть три таблицы class, teacher, unit.
class
{
groupgp
tipgroup
group
}


teacher
{
group_t
name
}


unit
{
group_t
name
}


соединены вот так

select .... from class
join teacher on teacher.group_t=class.groupgp
join unit on unit.group_t=teacher.group_t

С таблицы class нужно вывести поле groupgp которое содержит значения на букву 'G' и на букву 'P', где нужно отобрать значения из таблиц teacher и unit, где значения поля teacher.group_t начинаются на букву 'G' с именем teacher.name которое равно по имени unit.name и значения в поле unit.group_t начинаются на букву 'P'.

вот наброски
select class.groupgp as group from class       
join teacher on teacher.group_t=class.groupgp
join unit on unit.group_t=teacher.group_t
where ...

помогите пожалуйста, плохо знаком с sql
Ответ: Sqlhelpmeplease,

почитать про PIVOT, либо его аналоги на CASE + GROUP BY
Вопрос: Помогите с SELECT

Доброго времени суток!
Нужна помощь с запросом!

Есть результат запроса:
id LocationX LocationY LocationZ Name
03F5AC5BA504 -30.73 194.46 21.34 A
03F5AC5BA504 -30.73 194.46 21.34 A
4B2A125CD104 -31.11 194.46 21.34 A
4B2A125CD104 -31.11 194.46 21.34 B
Из него видно, что по столбцу ID по 2 одинаковые записи с одинаковыми координатами, но втором случае одна запись имеет Name "A", а вторая "B"
Вопрос: как сделать чтобы запрос выдавал 1 строку с одинаковыми ID и разными Name?

Какой должен быть результат запроса:
id LocationX LocationY LocationZ Name
4B2A125CD104 -31.11 194.46 21.34 B
Ответ: a_voronin,

Опять спешите и не думаете...
Вопрос: Помогите составить select

есть таблица mynotes с полем "iPath". Значения которого такие:

Microsoft
Microsoft\Windows
Microsoft\Windows\XP
Microsoft\Windows\XP\SP3
Microsoft\Windows\ME

делаю
select * from mynotes where ipath LIKE '%Microsoft\Windows\XP%'

записей 0.

делаю
select * from mynotes where ipath LIKE '%Microsoft\\Windows\\XP%'

выбираются две записи:

Microsoft\Windows\XP
Microsoft\Windows\XP\SP3

как и должно быть.

Строка селекта формируется из Java приложения и имеет примерно такой вид:
List list = session.createQuery("from mynotes where ipath LIKE '%" + mask + "%'").list();

где mask это и есть значение фильтра, т.е. "Microsoft\Windows\XP"

Вопрос: как мне в mask впихнуть заместо одного слеша - двойной, чтобы запрос отработал корректно?
Ответ: Спасибо всем.
Решил вопрос.
Вопрос: Хранить в SQL diff и в дальнейшем сделать select

Добрый день
Подскажите как правильне сделать?
Есть необходимость хранить маки и IP в базе, но если раз в 5 минут просто писать в базу текущее состояние - получается очень много. медленно ищет, и долго добавляется. Написал скрипт, который просто делает diff между двумя последними состояниями и показывает различия. Примерно такие данные получаются:
id datetimeflagipmacintvlans
11480409401:new:1.1.158.4374867a6836f5TenGigabitEthernet0/2/0.8830745
21480410001:new:1.1.159.877062b8c6c70bTenGigabitEthernet0/2/0.8820931
31480410001:new:1.1.157.1667062b8bf9283TenGigabitEthernet0/2/0.8830440
41480410001:new:1.1.158.7094de80bed855TenGigabitEthernet0/2/0.8760125
51480412401:del:1.1.159.877062b8c6c70bTenGigabitEthernet0/2/0.8820931
61480412401:new:1.1.159.211001e9096632dTenGigabitEthernet0/2/0.8830260

в момент времени 1480409401 добавился 1 адрес, в 1480410001 добавилось 3 мака, а в 1480412401 добавился 1 и один из первых исчез. Эту инфу я могу прямо так и писать в базу.

Но, допустим мне надо посмотреть кто был в базе в момент времени 1480410001 (если я просто сделаю datetime = 1480410001 то туда не попадет mac c id=1).
Те пока нет del - нужно считать что запись в базе есть. и в селекте ее показывать.

от сюда 2 вопроса:
как лучше хранить такого рода информацию?
если хранить прямо так, то как сделать селект что бы увидеть не удаленные записи? (когда именно запись была добавлена - заранее неизвестно. те 1480409401 может быть и 1000000001 и 1. ну если не делать доп селекта)
Ответ: Ну хотя тут еще можно выцепить не обращая внимание на флаг. но как выцепить тех кто получил раньше и освободил ползже? те вообще не попал в выборку?

Например из этой выборки получить 000af5898980 при условии recdate > 1481610610 and recdate < 1481615301
(1481610601, "1","0", INET_ATON ("2.2.82.30"), CONV("000af5898980",16,10),"TenGigabitEthernet0/2/0.8610652"),
(1481615401, "1","1", INET_ATON ("2.2.82.30"), CONV("000af5898980",16,10),"TenGigabitEthernet0/2/0.8610652"),
Вопрос: Помогите разобраться select, like, concat

Приветствую всех!

есть таблица:

id int(11) NOT NULL AUTO_INCREMENT,
br text DEFAULT NULL


в ней данные:
1 17;21
2 19;12
3 13;9
4 14;18
5 8;26

есть запрос:

SELECT * FROM table1 t
WHERE ';17;' LIKE CONCAT(';',br,';')
OR ';21;' LIKE CONCAT(';',br,';')
OR ';19;' LIKE CONCAT(';',br,';')
OR ';12;' LIKE CONCAT(';',br,';')
OR ';13;' LIKE CONCAT(';',br,';')
OR ';9;' LIKE CONCAT(';',br,';')
OR ';14;' LIKE CONCAT(';',br,';')
OR ';18;' LIKE CONCAT(';',br,';')
OR ';8;' LIKE CONCAT(';',br,';')
OR ';26;' LIKE CONCAT(';',br,';');


почему на выходе ничего?
Ответ: все верно
CONCAT(';',br,';') LIKE '%;17;%'
пора домой %