|
|
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Приветствую. Как пример имеется база MySQL, в которой три таблицы. table1 состоит из 4 столбцов: ID, Value, Option, Date. table2 состоит из ID, и Value. table3 состоит из ID и rDate, Задача примерно следующая: Сложить Value в table1,у которых один ID и опция X за последние 30 дней, при условие что rDate в table3 больше 30 дней, и результат записать в Value table2. Для наглядности: При регистрации пользователя, ему присваивается Id и дата регистрации(rDate), в таблице три. Далее, он выполняет определенные операции, допустим inc и dec с присвоенным ему значением, которые записываются в таблицу 1, которая выполняет функцию лога. Нужно посчитать, насколько за месяц он увеличил присвоенное ему значение, при условие его регистрации более 30 дней, и записать полученное значение в таблицу 2. Как будет выглядеть sql запрос? PS в sql очень новичок, пока писал еще возник вопрос о целесообразности использования ключей в подобной схеме(слышал при их существование, и в целом про выполняемую ими функцию, но обязательно ли их использование при малых объемах таблиц?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 19:04:24 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
k1mOn, примерно так: insert into t2 select id, sum((case when option='inc' then Value else -Value end)) from t3 left join t1 on t1.id=t3.id and t1 date between <начало месяца> and <кобец месяца> where t3.rdate < date_add(now(), interval -1 month) П.С. ключи -- использыйте обязательно. В первую очередь ПримариКей а потом внешние ключи тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 19:37:43 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
Спасибо. А <начало месяца> и <конец месяца> тут это что?В смысле, дефолтные параметры, или ? И это получается несколькими запросами делается, так? Просто я передаю в базу запрос через программу на с#, не будет ли проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2014, 19:58:46 |
|
||
|
Помогите с запросом
|
|||
|---|---|---|---|
|
#18+
k1mOn, вы можете просто грубо сгенерировать необходимый период из ц#, используйте одинарные кавычки: ....where rdate >= '2014-04-01' and rdate < '2014-05-01'.... или используйте параметры, прочитайте как там в Ц# это делается. Что-то типа (псевдо-код): String sqlString = "..........where rdate >= ? and rdate < ?...." Db.DoSql(sqlString, new Date.parse('2014-04-01'), new Date.parse('2014-05-01') ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 00:02:46 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38651458&tid=1834762]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 370ms |

| 0 / 0 |
