У меня есть еженедельные данные о каждом запасе товара.Я хочу сгруппировать его по годам и месяцам и получить первое значение каждого месяца.Другими словами, я хочу получать начальный запас каждого месяца, независимо от дня месяца.
+------------+---------+
| MyDate | MyValue |
+------------+---------+
| 2018-01-06 | 2 |*
| 2018-01-13 | 7 |
| 2018-01-20 | 5 |
| 2018-01-27 | 2 |
| 2018-02-03 | 3 |*
| 2018-02-10 | 10 |
| 2018-02-17 | 6 |
| 2018-02-24 | 4 |
| 2018-03-03 | 7 |*
| 2018-03-10 | 5 |
| 2018-03-17 | 3 |
| 2018-03-24 | 4 |
| 2018-03-31 | 6 |
+------------+---------+
Желаемые результаты:
+----------------+---------+
| FirstDayOfMonth| MyValue |
+----------------+---------+
| 2018-01-01 | 2 |
| 2018-02-01 | 3 |
| 2018-03-01 | 7 |
+----------------+---------+
Я думал, что это может сработать, но это не так.
select
[product],
datefromparts(year([MyDate]), month([MyDate]), 1),
FIRST_VALUE(MyValue) OVER (PARTITION BY [Product], YEAR([MyDate]), MONTH([MyDate]) ORDER BY [MyDate] ASC) AS MyValue
from
MyTable
group by
[Product],
YEAR([MyDate]), MONTH([MyDate])
Редактировать .Спасибо.Акцент в моем вопросе не о том, как получить первый день месяца.Я знаю, что для этого есть разные методы.
Акцент на том, как получить ПЕРВОЕ значение в месяц (начальный запас).Если есть шанс получить закрытый запас за один выстрел - было бы здорово.Ответы, основанные на ROW_NUMBER
, не позволяют получить итоговый запас за один выстрел, потребуют двух объединений.
Редактировать после принятия ответа
Пожалуйста, рассмотрите ответ Джона Каппеллетти как альтернативу принятому: https://stackoverflow.com/a/53559750/1903793