2013-03-05 2 views
-1

У меня есть переменная, которую мне нужно показать по месяцам. Эта переменная является логической, и если ее установить True, это означает, что приложение было установлено.Как добавить переменные в SQL

Пример: переменная = intalled приложения

В январе было 20 установленных приложений. В феврале было установлено 10 установленных приложений. В марте было установлено 5 установленных приложений.

Я хочу показать на столе все приложения, которые были установлены (булево = True):

January: 20 

February: 20 (January) + 10 = 30 

March: 20 (January) + 10 (February) + 5 (March) = 35 

Кто-нибудь знает, как я мог бы сделать это в Mysql?

Благодаря

+1

Показать свои усилия и пожалуйста, напишите некоторые SQL вы пробовали. –

+0

, пожалуйста, предоставьте что-нибудь, чтобы продолжить. как и структуры таблиц и любые sql, которые вы пытались выполнить. – Randy

ответ

0

Я понял! Я использовал рекурсивный

SELECT (select id_time from database.dim_time where id_time = a.fk_time) AS yearmonth, (select sum(if(installed in (1), 1,0)) as installed from database.facts_table where fk_time <= yearmonth) as installed FROM database.facts_table AS a GROUP BY yearmonth ORDER BY yearmonth ASC

0

Если я правильно понимаю, это просто простой запрос с заказом по.

select COLUMNS_YOU_WANT from TABLE_NAME 
where YOUR_BOOLEAN == True 
order by SOME_DATE_COLUMN 

Надеюсь, вы достаточно хорошо владеете SQL, чтобы заменить разделы тем, что вам нужно.

+0

Это не упорядочение строк. Я хочу, чтобы была установлена ​​сумма aps. Также как эволюция установки. – user2137198

+0

Хорошо, это было не совсем понятно в первом посте. Просто получите сумму каждого месяца, а затем добавьте потом на стороне PHP/Python. Вы запрашиваете БД вручную или программно? Не делайте SQL делать больше, чем нужно. Скользящая сумма в PHP/Python проста. – JustinDanielson

1

Вы можете использовать подзапрос, чтобы группировать установки по месяцам. Тогда вы можете нам переменные во внешнем запросе, чтобы вычислить накопленную сумму:

select installation_year 
,  installation_month 
,  installation_count 
,  (@running_sum:= @running_sum + installation_count) as cumulative_sum 
from (
     select year(installation_date) as installation_year 
     ,  month(installation_date) as installation_month 
     ,  count(*) as installation_count 
     from YourTable 
     group by 
       installation_year 
     ,  installation_month 
     ) as SubQueryAlias 
join (select @running_sum := 0) as InitVars 
order by 
     installation_year 
,  installation_month 

Example at SQL Fiddle.

0

Я предполагаю, что у вас есть «Приложение» таблица, которая содержит «Installed» колонки и " InstalledDate ". Если это так ...

SELECT Count(*) 
FROM Applications 
WHERE Installed = 1 -- Assumes a bit/boolean column. 
AND InstalledDate BETWEEN @StartDate AND @EndDate; 

Скотт

+0

Я понял! Я использовал рекурсивный: – user2137198

+0

ВЫБОР (выберите id_time из database.dim_time, где id_time = a.fk_time) А.С. годМесяц, (выбрать сумму (если (установлено в (1), 1,0)), как установлено из базы данных .facts_table , где fk_time <= годМесяц ), как установлено, ОТ database.facts_table КАК в GROUP BY годМесяц ORDER BY годМесяц ASC; – user2137198

1

что-то вроде:

Select COUNT(*),Month 
From Apps 
where installed = true 
group by Month 
+0

Как это добавит количество установок в январе к числу установок в феврале? – Andomar

+0

Просто сделайте это, а затем подведите конкретные диапазоны, которые вы хотите «на лету» на любом языке, который вы используете, чтобы запросить db. – JustinDanielson

Смежные вопросы