2016-02-15 5 views
0

Речь идет не о последнем дне конкретного месяца.C# WPF SQL) Как узнать последнюю дату (где пользователь вводил запись) или самое большое значение в конкретном месяце в таблице базы данных SQL программно?

Я пытаюсь вычислить отношение CAGR (составной годовой (месячный) темп роста). Таким образом, на последней введенной дате всегда наибольшее значение в конкретном месяце означает, что значение только увеличивается.

Однако есть вероятность, что пользователи не будут вводить каждый день (включая последний день месяца). Поэтому я должен знать, какая дата - то, что пользователь ввел в последнее время в конкретный месяц.

См. Прикрепленное изображение.

enter image description here

Я был всегда доволен превосходством людей в StackOverflow! Большое вам спасибо!

+1

Как вы доступ к базе данных? Что вы используете с вашими другими запросами (LINQ? SQL?)? – Tyress

+0

@Tyress, Большое спасибо за ваш комментарий. Я использую SQL только потому, что я действительно начинаю программировать. –

+0

Мое решение благодаря ответным людям: «SELECT Max (мой столбец данных) FROM my table WHERE MONTH (мой столбец даты) = MONTH (DATEADD (MONTH, -1, getdate())) ' -1 для предыдущего (последнего) месяца. Большое спасибо людям, которые разделяли отличные ответы. –

ответ

1

Вот синтаксис для SQL Server:

WITH 
CTE 
AS 
(
    SELECT 
     dt 
     ,Value 
     ,ROW_NUMBER() 
     OVER (PARTITION BY DATEDIFF(month, '2001-01-01', dt) ORDER BY dt desc) AS rn 
    FROM YourTable 
) 
SELECT 
    dt 
    ,Value 
FROM CTE 
WHERE rn = 1 
; 

В общем, посмотрите вверх top-n-per-group или greatest-n-per-group.

Для более детального ответа с другими вариантами, как сделать это увидеть: https://dba.stackexchange.com/questions/86415/retrieving-n-rows-per-group

+0

Большое спасибо за ваше превосходство. Тем не менее, многие термины очень сложны для меня, и мне нужно делать это программно. Не могли бы вы любезно показать мне путь ...? –

+0

Что значит «программно»? Я показал SQL-запрос, который будет возвращать одну строку в месяц с датой и значением, которые соответствуют последней записи в месяц. –

+0

Хм .. Это только одна команда запроса sql? Мне кажется, что для новичков, как я, немного сложно. Я могу понять только 50 ~ 60%, но не «With From CTE, rn и т. Д. Я имел в виду« программно »по коду C#. Благодарю вас, я посмотрю на самую страшную-на-группу в качестве своего рода гида. –

1
SELECT top(1) * 
FROM table 
WHERE dt >= 01/02/2016 
    AND dt <= 29/02/2016 
ORDER BY value DESC 
+0

Я очень ценю, что вы также оказали мне отличное вдохновение. Еще раз спасибо и за вашу небольшую ссылку, я решил это через «SELECT Max» (мой столбец данных) FROM my table WHERE MONTH (мой столбец даты) = MONTH (DATEADD (MONTH, -1, getdate())) -1 для предыдущего (последнего) месяца. –