
Sergey
11.08.2016
08:07:37
Или без цен надо?

Bulat
11.08.2016
08:07:39
можно без цен

Andrey
11.08.2016
08:08:22
Здесь только через union делать. Берешь складываешь таблицу с собой, поменяв местами столбцы. А после дистинкт.

Google

Sergey
11.08.2016
08:09:09
Мало того что union так ещё и subquery

Andrey
11.08.2016
08:10:35

Bulat
11.08.2016
08:11:29
ок, спасибо сейчас попробую
https://avitotech.timepad.ru/event/352210/

Sergey
11.08.2016
08:16:22

Andrey
11.08.2016
08:17:20

Bulat
11.08.2016
08:27:45

Pavel
11.08.2016
08:40:43
а есть онлайн-место, где можно mssql потрогать? sqlfiddle только mysql умеет.

Sergey
11.08.2016
08:45:47
MariaDB [test]> select distinct least(a,b), greatest(b,a) from test limit 5;
+------------+---------------+
| least(a,b) | greatest(b,a) |
+------------+---------------+
| msk | ufa |
| msk | spb |
| spb | ufa |
| kgd | msk |
| kgd | spb |
+------------+---------------+
5 rows in set (0.00 sec)
MariaDB [test]> select * from test;
+------+------+------+
| a | b | c |
+------+------+------+
| msk | ufa | 10 |
| ufa | msk | 10 |
| spb | msk | 10 |
| spb | ufa | 20 |
| kgd | msk | 15 |
| kgd | spb | 17 |
| ekb | nsk | 5 |
| msk | vla | 50 |
+------+------+------+
8 rows in set (0.00 sec)
но это mysql) mssql мне негде пощупать
с union вариант, кстати, бесполезен ибо только лишние дубликаты создает
в sqlite вместо least/greatest mix/max работают

Google

Bulat
11.08.2016
09:15:04
сейчас почитаю

Cykooz
11.08.2016
09:42:08
Можно попробовать запилить индекс по выражению (или что там в MSSQL вместо него). Т.е. надо запилить выражение, которое просто строит строку, где названия городов отсортированы.
Хотя это конечно уже не про ОРМ - придётся как то костылями выкручиваться, делать raw запросы.

Pavel
11.08.2016
09:43:28

Cykooz
11.08.2016
09:44:40
Под конец узнаем, что это всё надо не на Python, а в PHP ?

Pavel
11.08.2016
09:46:12

Bulat
11.08.2016
09:57:14

Sergey
11.08.2016
09:58:34
ну python и mssql - не такая частая связка

Bulat
11.08.2016
10:02:40
c# будет, но это уже не по моей части)

Andrew
11.08.2016
10:03:16

Bulat
11.08.2016
10:50:06
p.s c UNION ничего не получилось, т.к Москва-Уфа и Уфа-Москва есть


Zart
11.08.2016
11:00:32
MariaDB [test]> select distinct least(a,b), greatest(b,a) from test limit 5;
+------------+---------------+
| least(a,b) | greatest(b,a) |
+------------+---------------+
| msk | ufa |
| msk | spb |
| spb | ufa |
| kgd | msk |
| kgd | spb |
+------------+---------------+
5 rows in set (0.00 sec)
MariaDB [test]> select * from test;
+------+------+------+
| a | b | c |
+------+------+------+
| msk | ufa | 10 |
| ufa | msk | 10 |
| spb | msk | 10 |
| spb | ufa | 20 |
| kgd | msk | 15 |
| kgd | spb | 17 |
| ekb | nsk | 5 |
| msk | vla | 50 |
+------+------+------+
8 rows in set (0.00 sec)
но это mysql) mssql мне негде пощупать
drop table test
create table test (a nvarchar(20), b nvarchar(20), c int)
insert into test values
('msk', 'ufa', 10),
('ufa', 'msk', 10),
('spb', 'msk', 10),
('spb', 'ufa', 20),
('kgd', 'msk', 15),
('kgd', 'spb', 17),
('ekb', 'nsk', 5),
('msk', 'vla', 50)
select * from test
select distinct top 5 iif(a < b, a, b), iif(a > b, a, b) from test
результат:
(8 row(s) affected)
a b c
-------------------- -------------------- -----------
msk ufa 10
ufa msk 10
spb msk 10
spb ufa 20
kgd msk 15
kgd spb 17
ekb nsk 5
msk vla 50
(8 row(s) affected)
-------------------- --------------------
ekb nsk
kgd msk
kgd spb
msk spb
msk ufa
(5 row(s) affected)
select @@version
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2014 - 12.0.4213.0 (X64)
Jun 9 2015 12:06:16
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
вообще мсскл охуенный, но не для тех ниш, где живёт my/pg


Bulat
11.08.2016
11:24:01
Msg 102, Level 15, State 1, Line 20
Incorrect syntax near '<'.
http://clip2net.com/s/3B6PMKh
ms sql 2008

Туся
11.08.2016
11:27:47
2008 вроде еще не умеет iif
используй CASE

Google

Bulat
11.08.2016
11:28:58
С MS SQL версии 2012 появилась упрощенная форма записи IIF. Она может использоваться для упрощенной записи конструкции CASE, в том случае если возвращаются только 2 значения. Конструкция IIF имеет следующий вид:
буду пытать

Туся
11.08.2016
11:32:12
Что-то я так и не поняла смысл задачи. Наверное по диагонали читала.

Bulat
11.08.2016
11:33:51
есть А | B, не выводить B | A

Cykooz
11.08.2016
11:33:55
А ещё можно тупо завести доп. колонку, в которой хранить некое значение, которое будет одинаково в независимости от направления. В простом случае - строка с отсторироваными пунктами, чуть хитрее - хеш от этой строки.
На такую колонку можно навесить индекс, и не парится со всякими сложными CASE/IFF, и даже под любой ORM взлетит если надо.

Bulat
11.08.2016
11:36:46
я изначально так делал, но показалось сложным из-за inner join

Туся
11.08.2016
11:37:40
нужно вывести уникальные направления? И почему только 5? То есть если есть москва-уфа, то уфа-москва уже не нужно, но москва-липецк нужно? Так?

Bulat
11.08.2016
11:37:55
да, 5 - это требование

[Anonymous]
11.08.2016
11:38:10

Zart
11.08.2016
11:40:33
select distinct top 5 case when a < b then a else b end, case when a > b then a else b end from test

Туся
11.08.2016
11:41:08
угу

Zart
11.08.2016
11:41:22
но условия задачки дубовы
и на примерах вывода видно что результат у мускля и мс разный изза отсутствия сортировки
поэтому ограничение в 5 как-то бессмысленно

Bulat
11.08.2016
11:43:11
у меня еще условие что C нужно отсортировать по desc

Zart
11.08.2016
11:43:20
ну вот...
доим из тебя условия в час по чайной ложке

Bulat
11.08.2016
11:43:40
я думал что сам смогу, но как оказалось ..
спасибо что помогаете

Google

Zart
11.08.2016
11:44:21
select distinct top 5 iif(a < b, a, b), iif(a > b, a, b), c from test order by c desc
select distinct top 5 case when a < b then a else b end, case when a > b then a else b end, c from test order by c desc

Bulat
11.08.2016
11:47:11

Туся
11.08.2016
11:47:32

Zart
11.08.2016
11:47:33
?

Bulat
11.08.2016
11:47:37
ага

Zart
11.08.2016
11:47:46
а, дистинкт же по всем трём..

Туся
11.08.2016
11:47:50
тогда понятно, distinct нашел уникальные

Zart
11.08.2016
11:48:06
тогда надо делать субселект

Sergey
11.08.2016
11:48:13
в изначальной задаче речь шла про то, что цена одинаковая
через 2 часа еще что-то новое узнаем =)

Admin
ERROR: S client not available

Zart
11.08.2016
11:48:42
если цена в обоих направлениях одинакова, тогда дубликатов не будет

Bulat
11.08.2016
11:49:22
цена разная, но есть поле с одинаковым растоянием

Туся
11.08.2016
11:49:28
ну можно без сабселекта обойтись, если групбай приделать и макс или мин цену брать

Zart
11.08.2016
11:49:41
если нет, тогда надо сделать выборку с ииф/кейс по всей таблице - это по сути нормализует её к виду где значения по возврастанию в пределах строки
потом из неё уже делать дистинкт...

Sergey
11.08.2016
11:50:29
?

Zart
11.08.2016
11:50:36
нунахуй

Pavel
11.08.2016
11:50:51
нунахуй
давай видос про "ну вас всех"

Zart
11.08.2016
11:51:30
https://coub.com/view/4ty7q

Google

Туся
11.08.2016
11:53:09
может там еще айдишники есть, который тоже выводить надо.

Johnnie
11.08.2016
11:55:16
вы до сих пор мусолите что ли))
чувак сам не знает че хочет, а вы ему тут решениями сыплете ?

Туся
11.08.2016
11:55:56
да, тяжело работать без тз

Bulat
11.08.2016
11:57:20
?
есть поля A,B,C,D
а - город, b - город, c- цена, d - расстояние
цены разные, расстояние одинаковые
задача: исключить обратное направление
сортировка по цене

Zart
11.08.2016
12:00:00
мы наблюдаем за созданием нового стартапа...

Johnnie
11.08.2016
12:00:06
?

Pavel
11.08.2016
12:00:21

Zart
11.08.2016
12:00:41

Pavel
11.08.2016
12:01:16

Bulat
11.08.2016
12:01:56
с - не цена на самом деле, а популярность)

Темный
11.08.2016
12:02:51

Туся
11.08.2016
12:03:04
потому что это не цены)

Темный
11.08.2016
12:03:52
тогда должен быть еще 1 столбец где был бы класс обслуживания поездки
иначе зачем выводить одинаковые направления с разной ценой?
достаточно 1 раз вывести самое дешевое
Эта группа больше не существует