Loading...
stambi4a avatar stambi4a 126 Точки

[Homework] Databases Basics - Built In Functions - Problem 12. Games from 2011 and 2012

Колеги, ако някой има проблем с конкретната задача, едно малко упътване от мен. Оказва се, че няма значение как си кръщавате колоните.В тази задача даже е препоръчително да не кръстите Start пак Start след използването на FORMAT.

Хубав ден на всички.

EDIT: оказва се, че при използване на alias на таблицата и реферирането му при order by, може новото име на Start пак да е Start.

Тагове:
4
Databases Basics 30/09/2016 20:53:47
vani4ka66 avatar vani4ka66 24 Точки

Добре, смених Start на S, и пак не става. Имаш ли идея къде бъркам?

 

select top 50 g.Name as Game,

cast(g.Start as date) as S

 from Games g

 where year(g.Start)= 2011 or year(g.Start) =  2012

 order by g.Start, g.Name

1
29/09/2016 15:02:17
stambi4a avatar stambi4a 126 Точки

Здравей, смених ти каста с FORMAT(Start, 'yyyy-MM-dd') и мина в judge-a.

2
kaloyannikov avatar kaloyannikov 531 Точки

това се отнася май само за SQL Server щото на MySQL трябва да се кръсти пак 'start`.

1
29/09/2016 18:23:46
stambi4a avatar stambi4a 126 Точки

Възможно е. Аз съм на SQL Server в момента.При мен judge-a не приема query-то, ако е пак Start. Като разгледах резултатите, видях, че причината е всъщност, че трябва предварително да направи сортирането по дата и по име и тогава да ореже датата. Ако Start остане Start сортирането става по орязаната дата. Например има 3 дати 2011-11-09, чиито ред се променя в двата случая.

2
29/09/2016 18:33:24
Irrrka avatar Irrrka 19 Точки

Добре, де. Къде бъркам в моето решение? Смених и с Format, и с 'S' - еднакви резултати...

SELECT TOP 50 G.Name as 'Game', CAST(G.Start AS DATE) AS 'Start'
FROM GAMES AS G
WHERE YEAR(G.START) IN (2011, 2012)
ORDER BY 2, 1

 

Благодаря предварително.

0
stambi4a avatar stambi4a 126 Точки

Здравей.

Използвай FORMAT(Start, 'yyyy-MM-dd') as 'Start' вместо каста.

А също така Order By 2,1 подрежда по aliasa 'Start', не по G.Start, което орязва датите преди да ги сортира. Използвай Order By G.Start, G.Name.

Така работи.

1
01/10/2016 01:02:35
Irrrka avatar Irrrka 19 Точки

Да, сработи. Пак благодаря. И за обясненията. А с CAST не работи, защото има тук-там и интервали за заигравка :)

0
stambi4a avatar stambi4a 126 Точки

Абсолютно никакъв проблем.

Аз използвам кастове само при INSERT.

Успех.

0
aslv1 avatar aslv1 304 Точки

Благодаря за предложените решения. Помогнаха ми.

Само не мога да разбера защо има разлика между

CONVERT(date,LEFT(CONVERT(varchar,g.[Start],21),10))

и 

FORMAT([Start],'yyyy-MM-dd')

Сравних резултатите от двете заявки и са абсолютно еднакви...

 

П. П. Външният CONVERT(date,...) е напълно излишен, просто исках да си гарантирам, че типът е правилен.

0
stambi4a avatar stambi4a 126 Точки

Каква разлика имаш предвид?

0
12/10/2016 12:24:01
aslv1 avatar aslv1 304 Точки

Заявката с първия фрагмент не минава теста в Judge, резултат - грешен отговор.

Със втория фрагмент тестът е преминат успешно. Това е разликата laugh

При мен, локално, разлика в изходите от заявките няма. Затова се чудя защо в judge-а не е така (голяма част от темата е посветена на това, но досега не разбрах причината за различните резултати в judge).

Ето и цялата ми заявка:

SELECT TOP(50)
[Name],FORMAT([Start],'yyyy-MM-dd') AS [Start]
FROM [Games] as g
WHERE YEAR(g.[Start]) BETWEEN 2011 AND 2012
ORDER BY g.[Start],[Name]

 

0
stambi4a avatar stambi4a 126 Точки

Проблемът е в Convert. Просто Convert трябва да се wrap-не. Или махаш външният Convert, или го wrap-ваш.

0
15/10/2016 06:22:52
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.