У меня возникли проблемы с получением этой работы. У меня есть таблица с этими данными.Сравните две даты из столбцов SQL
| DateStarted | Field9 | Field2 | ID | Field6 |
----------------------------------------------------------------------------------------
| 2013-04-15 09:23:00 | TEST1 | TEST2 | 1 | 2000 |
| 2013-04-08 09:23:00 | TEST1 | TEST2 | 2 | 180 |
| 2013-04-15 09:23:00 | TEST2 | TEST3 | 3 | 1000 |
| 2013-04-04 09:23:00 | TEST2 | TEST3 | 7 | 80 |
| 2013-04-03 09:23:00 | TEST2 | TEST4 | 5 | 70 |
Что моя конечная цель в том, чтобы иметь две последние даты значения для Field9 быть возвращен, так что я мог бы вычитать значение Field6 для каждого уникального экземпляра Field9. Ниже приведен пример возврата.
| DateStarted | Field1 | Field2 | ID | SUB |
----------------------------------------------------------------------------------------
| 2013-04-15 09:23:00 | TEST1 | TEST2 | 1 | 1820 |
| 2013-04-15 09:23:00 | TEST2 | TEST3 | 3 | 920 |
Так что для второго ряда он взял две большие даты, а затем принял значение field6 и вычитают их возвращение только одну строку.
hi Aaron, я видел, что многие разработчики sql используют синтаксис, подобный вашему: 'rn = ROW_NUMBER() OVER (PARTITION by Field1 ORDER BY DateStarted DESC)', это новый или старый синтаксис, чем 'ROW_NUMBER() OVER (PARTITION by Field1 ORDER BY DateStarted DESC) rn', потому что я всегда использую второй.? –
@JW Есть много способов выражения псевдонимов, и это в основном просто стиль. [Вы можете прочитать, почему мне нравится синтаксис «alias = expression» и не нравится «псевдоним выражения» и предпочтет «выражение AS alias» вместо этого] (http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/ плохая-привычка-к-игры-с использованием-в-вместо-о-в-колонного aliases.aspx). –
@AB Я изменил то, что вы вы предоставлены; С х AS ( ВЫБОР DateStarted, Field9, Field2, FILEID, field3, гп = ROW_NUMBER() OVER (PARTITION BY Field1 ORDER BY DateStarted DESC) из файлов где Status = 1 и ProjectID = 21 и Field10 = 'EMAIL' ) SELECT DateStarted, Field9, Field2, fileid, Field3 FROM x WHERE rn = 1 ORDER BY Field9; но он просто возвращает наибольшую дату для одного значения поля 9, где он должен давать каждую из величайших дат для каждого из значений в Field9 – thedemon