#sql
Вопрос:
у меня проблема с sql-запросом. У меня есть таблица с акциями, в которой есть много акций, но в одной таблице.
например:
(там все в одной таблице):
**wkn - name - stock - date** lt;brgt; 12345 - Tesla - 200.92 - 2021.03.13 12345 - Tesla - 201.42 - 2021.04.14 12345 - Tesla - 203.59 - 2021.05.15 67890 - Amazon - 1002.33 - 2021.06.13 67890 - Amazon - 1005.34 - 2021.07.16 67890 - Amazon - 1012.99 - 2021.08.19
я хочу знать количество месяцев, в течение которых существует стоимость акции для каждого отдельного человека.
например:
есть акции для tesla на 20 месяцев.
и вот вопрос, который я пытался задать.
( запрос находится в цикле foreach)
(значение $[‘wkn’] — это каждый отдельный wkn из таблицы )
$kurse1_monate= $this-gt;_db-gt;prepare("SELECT wkn, TIMESTAMPDIFF(MONTH, min(SELECT date WHERE wkn LIKE '" . $value['wkn'] . "'), max(SELECT date WHERE wkn LIKE '" . $value['wkn'] . "')) FROM kurse1 WHERE wkn LIKE '" . $value['wkn'] . "' GROUP BY wkn"); $kurse1_monate-gt;execute(); $this-gt;_kurse1_monate = $kurse1_monate-gt;fetchAll(PDO::FETCH_ASSOC);
Комментарии:
1. С [‘wkn’] вы имеете в виду строку или имя ?
2. Так что это цикл foreach:
3. foreach ($this-gt;_wkn как $ключ =gt;gt; $значение)
4. и wkn-это квази каждое имя Индивидуально
Ответ №1:
Я попытался написать что-то, что, по моему мнению, по крайней мере дало бы хорошее представление о том, что я имел в виду. Не лучший в sql, но я думаю, что его можно прочитать.
SELECT [months] = FLOOR(A.[currentstock] / (stockdiff / monthdiff)) FROM ( SELECT monthdiff = DATEDIFF(MONTH, min(date), max(date)) , stockdiff = max(stock ) - min(stock) , currentstock = min(stock) FROM kurse1 WHERE wkn LIKE 12345 GROUP BY wkn ) A